Advertisement
klippa

User Payments

Oct 18th, 2022 (edited)
1,647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE users (
  2.   id BIGINT NOT NULL,  
  3.   name varchar NOT NULL UNIQUE,
  4.   age int NOT NULL,
  5.   PRIMARY KEY (id)
  6. );
  7.  
  8. insert into users (id, name, age) values
  9. (1, 'Ann', 25),
  10. (2, 'Mary', 25),
  11. (3, 'Boris', 30),
  12. (4, 'John', 30),
  13. (5, 'Ted', 30),
  14. (6, 'Kate', 35),
  15. (7, 'Sara', 35),
  16. (8, 'Victoria', 35),
  17. (9, 'Robin', 35);
  18.  
  19. CREATE TABLE payments (
  20.   id BIGINT NOT NULL,
  21.   user_id BIGINT NOT NULL,
  22.   date TIMESTAMP NOT NULL,
  23.   amount int NOT NULL,
  24.   PRIMARY KEY (id),
  25.   CONSTRAINT fk_payments_users FOREIGN KEY (user_id) REFERENCES users (id)
  26. );
  27.  
  28. insert into payments (id, user_id, date, amount) values
  29. (1, 1, '2018-02-25', 100),
  30. (2, 1, '2017-12-05', 10),
  31. (3, 2, '2020-03-12', 50),
  32. (4, 2, '2018-05-30', 30),
  33. (5, 3, '2021-06-11', 150),
  34. (6, 3, '2022-02-01', 5),
  35. (7, 4, '2017-07-02', 40),
  36. (8, 4, '2020-02-03', 125),
  37. (9, 5, '2022-06-27', 70),
  38. (10, 5, '2021-09-23', 75),
  39. (11, 6, '2021-11-15', 150),
  40. (12, 6, '2018-10-17', 10),
  41. (13, 7, '2020-04-25', 20),
  42. (14, 7, '2022-08-18', 10),
  43. (15, 8, '2018-11-27', 100),
  44. (16, 8, '2017-05-07', 150),
  45. (17, 9, '2019-01-08', 135),
  46. (18, 9, '2021-06-19', 70),
  47. (19, 9, '2022-06-19', 75),
  48. (20, 1, '2018-07-03', 25);
  49.  
  50. -- Please, select average payment per user age.
  51. select u.age, avg(p.amount) from users u
  52. join payments p on p.user_id = u.id
  53. group by u.age
  54.  
  55. -- Please, select all users without payments after a specific date.
  56. select id, name from users where id not in (select user_id from payments where date > '2019-12-31');
  57.  
  58. select u.id, min(u.name) as name from users u
  59. join payments p on p.user_id = u.id
  60. group by u.id
  61. having max(p.date) <= '2019-12-31';
  62.  
  63. -- Select all users who have made more than 2 payments
  64. select count(*), u.id, max(u.name) as name from users u
  65. join payments p on p.user_id = u.id
  66. group by u.id
  67. having count(*) > 2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement