Kelevra_Slevin

Проект_продвинутый SQL

Jun 22nd, 2023
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Задача 1
  2.  
  3. SELECT COUNT(id)
  4. FROM stackoverflow.posts
  5. WHERE (score>300 OR favorites_count >=100) AND post_type_id = 1
  6.  
  7. --Задача 2
  8.  
  9. WITH
  10. cnt AS
  11. (SELECT CAST(DATE_TRUNC('day', p.creation_date) AS date) AS date, COUNT(p.id)
  12. FROM stackoverflow.posts p
  13. WHERE post_type_id = 1
  14. GROUP BY CAST(DATE_TRUNC('day', p.creation_date) AS date)
  15. HAVING CAST(DATE_TRUNC('day', p.creation_date) AS date) BETWEEN '2008-11-01' AND '2008-11-18')
  16.  
  17. SELECT ROUND(AVG(count)) FROM cnt
  18.  
  19. --Задача 3
  20.  
  21. SELECT COUNT(DISTINCT(u.id))
  22. FROM stackoverflow.users u
  23. JOIN stackoverflow.badges b
  24. ON u.id = b.user_id
  25. WHERE CAST(DATE_TRUNC('day', u.creation_date) AS date) = CAST(DATE_TRUNC('day', b.creation_date) AS date)
  26.  
  27. --Задача 4
  28.  
  29. SELECT COUNT(DISTINCT(p.id))
  30. FROM stackoverflow.posts p
  31. JOIN stackoverflow.users u
  32. ON p.user_id = u.id
  33. RIGHT JOIN stackoverflow.votes v
  34. ON p.id = v.post_id
  35. WHERE u.display_name LIKE 'Joel Coehoorn'
  36.  
  37. --Задача 5
  38.  
  39. SELECT *, RANK() OVER (ORDER BY id DESC) AS rank
  40. FROM stackoverflow.vote_types
  41. ORDER BY id
  42.  
  43. --Задача 6
  44.  
  45. SELECT v.user_id, COUNT(v.id)
  46. FROM stackoverflow.votes v
  47. WHERE vote_type_id = 6
  48. GROUP BY v.user_id
  49. ORDER BY COUNT(v.id) DESC, v.user_id DESC
  50. LIMIT 10
  51.  
  52. --Задача 7
  53.  
  54. SELECT b.user_id, COUNT(b.id), DENSE_RANK() OVER (ORDER BY COUNT(b.id) DESC)
  55. FROM stackoverflow.badges b
  56. WHERE CAST(creation_date AS date) BETWEEN '2008-11-15' AND '2008-12-15'
  57. GROUP BY b.user_id
  58. ORDER BY COUNT(b.id) DESC, b.user_id
  59. LIMIT 10
  60.  
  61. --Задача 8
  62.  
  63. SELECT p.title, p.user_id, p.score,
  64. ROUND(AVG(p.score) OVER (PARTITION BY p.user_id))
  65. FROM stackoverflow.posts p
  66. WHERE p.score <> 0 AND p.title IS NOT NULL
  67.  
  68. --Задача 9
  69.  
  70. SELECT p.title
  71. FROM stackoverflow.posts p
  72. WHERE p.user_id IN
  73. (SELECT user_id FROM stackoverflow.badges GROUP BY user_id HAVING COUNT(id)>1000)
  74. AND p.title IS NOT NULL
  75.  
  76. --Задача 10
  77.  
  78. SELECT id, views,
  79. CASE
  80.            WHEN views <100 THEN 3
  81.            WHEN views <350 THEN 2
  82.            WHEN views>=350 THEN 1
  83. END
  84. FROM stackoverflow.users
  85. WHERE location LIKE '%United States%' AND views > 0
  86.  
  87. --Задача 11
  88.  
  89. WITH tb AS
  90. (SELECT id, views,
  91. CASE
  92.            WHEN views <100 THEN 3
  93.            WHEN views <350 THEN 2
  94.            WHEN views>=350 THEN 1
  95. END
  96. FROM stackoverflow.users
  97. WHERE location LIKE '%United States%' AND views > 0)
  98.  
  99. SELECT *
  100. FROM tb
  101. WHERE id IN (16587,9585,9094,33437,15079,19006,22732,403434,4829,3469)
  102. ORDER BY views DESC, id
  103.  
  104. --Задача 12
  105.  
  106. WITH
  107. t1 AS
  108. (SELECT CAST(DATE_TRUNC('day', creation_date) AS date) AS dt, COUNT(id) AS val
  109. FROM stackoverflow.users
  110. GROUP BY CAST(DATE_TRUNC('day', creation_date) AS date)
  111. ORDER BY CAST(DATE_TRUNC('day', creation_date) AS date))
  112.  
  113. SELECT RANK() OVER(ORDER BY dt) ,val,
  114. SUM(val) OVER (ORDER BY dt) AS cum
  115. FROM t1
  116. WHERE CAST(DATE_TRUNC('day', dt) AS date) BETWEEN '2008-11-01' AND '2008-11-30'
  117.  
  118. --Задача 13
  119.  
  120. WITH p AS
  121. (SELECT user_id, creation_date,
  122. RANK() OVER (PARTITION BY user_id ORDER BY creation_date)  AS first_pub
  123. FROM stackoverflow.posts
  124.  
  125. ORDER BY user_id)
  126.  
  127. SELECT user_id, p.creation_date - u.creation_date FROM p
  128. JOIN stackoverflow.users u ON p.user_id = u.id
  129. WHERE first_pub = 1
  130.  
  131. --## Часть 2
  132. --### Задача 1
  133.  
  134. SELECT CAST(DATE_TRUNC('month', creation_date) AS date) AS month, SUM(views_count) AS sum
  135. FROM stackoverflow.posts
  136. WHERE creation_date::date BETWEEN '2008-01-01' AND '2008-12-31'
  137. GROUP BY CAST(DATE_TRUNC('month', creation_date) AS date)
  138. ORDER BY sum DESC
  139.  
  140. --Задача 2
  141.  
  142. SELECT display_name,
  143.        COUNT(DISTINCT(user_id))
  144. FROM stackoverflow.users AS u JOIN stackoverflow.posts AS p ON u.id=p.user_id
  145. JOIN stackoverflow.post_types AS t ON p.post_type_id=t.id
  146. WHERE (DATE_TRUNC('day', p.creation_date) <= DATE_TRUNC('day', u.creation_date) + INTERVAL '1 month') AND (p.post_type_id=2)
  147. GROUP BY display_name
  148. HAVING COUNT(p.id) > 100
  149.  
  150. --Задача 3
  151.  
  152. WITH
  153. t1 AS
  154. (SELECT u.id
  155. FROM stackoverflow.users AS u JOIN stackoverflow.posts AS p ON u.id=p.user_id
  156. WHERE (u.creation_date::date BETWEEN '2008-09-01' AND '2008-09-30')
  157. AND ((p.creation_date::date BETWEEN '2008-12-01' AND '2008-12-31'))
  158. GROUP BY u.id)
  159.  
  160. SELECT CAST(DATE_TRUNC('month', p.creation_date) AS date) AS month, COUNT(p.id) AS cnt
  161. FROM stackoverflow.users AS u JOIN stackoverflow.posts AS p ON u.id=p.user_id
  162. WHERE (p.creation_date::date BETWEEN '2008-01-01' AND '2008-12-31')
  163. AND p.user_id IN (SELECT * FROM t1)
  164. GROUP BY CAST(DATE_TRUNC('month', p.creation_date) AS date)
  165. ORDER BY CAST(DATE_TRUNC('month', p.creation_date) AS date) DESC
  166.  
  167. --Задача 4
  168.  
  169. SELECT user_id, creation_date, views_count,
  170. SUM(views_count) OVER (PARTITION BY user_id ORDER BY creation_date)
  171. FROM stackoverflow.posts
  172. ORDER BY user_id, creation_date
  173.  
  174. --Задача 5
  175.  
  176. WITH users AS (SELECT p.user_id,
  177.       COUNT(distinct p.creation_date::date)
  178. FROM stackoverflow.posts AS p
  179. WHERE CAST(creation_date AS date) BETWEEN '2008-12-1' AND '2008-12-7'
  180. GROUP BY p.user_id
  181. HAVING COUNT(p.id)>=1)
  182. SELECT ROUND(AVG(count))
  183. FROM users
  184.  
  185. --Задача 6
  186.  
  187. with a AS (SELECT EXTRACT(month from creation_date) AS num, COUNT(id) AS cnt
  188.            FROM stackoverflow.posts
  189.            WHERE  creation_date::date BETWEEN '2008-09-01' AND '2008-12-31'
  190.           GROUP BY 1)
  191.  
  192.           SELECT num, cnt, ROUND(((cnt::numeric/LAG(cnt) OVER (ORDER BY num))-1)*100,2)
  193.           FROM a
  194. --Задача 7
  195.  
  196. SELECT
  197. DISTINCT(EXTRACT(week FROM creation_date::date)),
  198. MAX(creation_date) OVER (ORDER BY EXTRACT(week FROM creation_date::date))
  199. FROM stackoverflow.posts
  200. WHERE user_id = 22656
  201. AND creation_date::date BETWEEN '2008-10-01' AND '2008-10-31'
Add Comment
Please, Sign In to add comment