q04.sql 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. \set date '\'2010-02-12\''::timestamp
  2. -- materialize=> \i q04.sql
  3. -- CREATE MATERIALIZED VIEW
  4. -- Time: 595.780 ms
  5. -- CREATE INDEX
  6. -- Time: 523.990 ms
  7. -- person.id | person.firstName | person.lastName | creationdate | messagecount
  8. -- ----------------+------------------+-----------------+----------------------------+--------------
  9. -- 4398046519825 | Ahmad Rafiq | Akbar | 2010-05-23 13:24:43.393+00 | 1195
  10. -- 6597069774064 | Ayesha | Ahmed | 2010-08-25 11:58:50.853+00 | 948
  11. -- 15393162797132 | Shweta | Kapoor | 2011-04-17 02:52:48.739+00 | 835
  12. -- 2199023265231 | Wei | Wang | 2010-04-21 01:27:43.705+00 | 738
  13. -- 24189255819865 | Sombat | Amarttayakul | 2011-11-12 21:04:25.195+00 | 435
  14. -- 2199023260815 | Chen | Li | 2010-04-27 14:01:48.888+00 | 402
  15. -- 10995116284819 | John | Khan | 2010-12-24 17:41:09.731+00 | 382
  16. -- 2866 | Eve-Mary Thai | Hoang | 2010-02-05 03:07:01.196+00 | 345
  17. -- 6597069770739 | Abdul Haris | Gallagher | 2010-08-29 01:13:55.834+00 | 292
  18. -- 28587302329901 | Shweta | Khan | 2012-03-30 09:33:32.228+00 | 261
  19. -- 15393162799092 | Ge | Wang | 2011-03-25 19:48:01.039+00 | 151
  20. -- 32985348840714 | John | Singh | 2012-07-23 00:06:08.096+00 | 64
  21. -- 10995116279311 | Abhishek | Kumar | 2010-12-04 19:27:01.714+00 | 54
  22. -- 28587302327043 | A. | Kumar | 2012-04-19 07:03:33.413+00 | 48
  23. -- 32985348841684 | Jie | Zhu | 2012-09-02 10:37:26.12+00 | 48
  24. -- 4398046518418 | Yang | Li | 2010-05-23 19:28:52.655+00 | 46
  25. -- 10995116285596 | Taufik | Budjana | 2010-12-25 15:16:21.391+00 | 46
  26. -- 26388279068970 | Amit | Reddy | 2012-02-08 20:18:06.166+00 | 46
  27. -- 8796093028172 | Karan | Khan | 2010-10-10 03:24:24.86+00 | 44
  28. -- 28587302328636 | Anh | Ha | 2012-04-12 19:20:15.578+00 | 44
  29. -- 28587302329156 | A. | Singh | 2012-04-24 09:01:46.435+00 | 44
  30. -- 6597069775034 | Abdul Jamil | Qureshi | 2010-08-26 20:49:21.329+00 | 43
  31. -- 19791209304987 | John | Singh | 2011-08-09 05:18:25.45+00 | 43
  32. -- 26388279071390 | Rahul | Khan | 2012-01-21 02:24:23.843+00 | 43
  33. -- 32985348843490 | Yang | Li | 2012-07-12 22:09:43.58+00 | 42
  34. -- 7937 | Rahul | Kumar | 2010-01-23 14:07:41.044+00 | 41
  35. -- 2199023261398 | Nguyen Huu | Nguyen | 2010-03-07 00:09:13.471+00 | 41
  36. -- 26388279074760 | A. | Nair | 2012-02-22 23:18:47.392+00 | 41
  37. -- 6597069768174 | Jun | He | 2010-08-06 22:04:49.717+00 | 40
  38. -- 24189255820986 | Bichang | Zhang | 2011-11-17 20:02:46.129+00 | 38
  39. -- 13194139541713 | Deepak | Singh | 2011-01-23 15:36:38.709+00 | 37
  40. -- 17592186048064 | V. | Joshi | 2011-05-13 06:34:40.153+00 | 37
  41. -- 21990232556039 | Naresh | Kumar | 2011-10-26 19:55:13.777+00 | 37
  42. -- 21990232559111 | Karan | Sharma | 2011-10-12 23:23:49.411+00 | 37
  43. -- 30786325582458 | R. | Kapoor | 2012-07-05 05:01:47.042+00 | 37
  44. -- 4398046512214 | Zheng | Li | 2010-06-22 01:39:52.845+00 | 36
  45. -- 6597069773793 | Jun | Wang | 2010-07-17 12:38:41.01+00 | 36
  46. -- 15393162788923 | Rahul | Sharma | 2011-03-10 15:49:01.365+00 | 36
  47. -- 17592186054998 | Manuel | Cosio | 2011-05-10 02:03:12.983+00 | 36
  48. -- 32985348841739 | Anupam | Rao | 2012-08-24 03:56:50.79+00 | 36
  49. -- 2208 | Shweta | Sharma | 2010-01-16 16:40:35.139+00 | 35
  50. -- 2199023263560 | Wuttichai | Boy | 2010-03-28 18:55:23.334+00 | 35
  51. -- 6597069768442 | Abhishek | Kapoor | 2010-09-01 18:11:31.748+00 | 35
  52. -- 17592186051684 | Abhishek | Singh | 2011-07-02 11:05:24.354+00 | 35
  53. -- 19791209309552 | Abdul Haris | Anwar | 2011-07-27 16:59:54.637+00 | 35
  54. -- 26388279073421 | Mirza Kalich | Ahmed | 2012-02-16 05:07:07.084+00 | 35
  55. -- 28587302327725 | Aama | Shrestha | 2012-04-09 00:22:34.226+00 | 35
  56. -- 30786325580960 | Duleep | Banda | 2012-05-15 15:04:55.025+00 | 35
  57. -- 30786325581241 | Jean | Arnaud | 2012-05-21 14:14:11.353+00 | 35
  58. -- 15393162798428 | Chen | Zhang | 2011-03-12 01:23:21.165+00 | 34
  59. -- 17592186051872 | John | Sharma | 2011-06-11 07:51:02.867+00 | 34
  60. -- 28587302329829 | Oleg | Chezhina | 2012-05-02 11:31:39.054+00 | 34
  61. -- 5452 | Agustiar | Balawan | 2010-01-04 19:14:27.142+00 | 33
  62. -- 2199023264344 | R. | Kapoor | 2010-04-30 05:24:51.797+00 | 33
  63. -- 8796093023211 | Amir | Chen | 2010-10-31 01:03:17.379+00 | 33
  64. -- 13194139542917 | Lei | Li | 2011-01-15 02:09:59.71+00 | 33
  65. -- 19791209305377 | John | Singh | 2011-07-31 15:48:27.794+00 | 33
  66. -- 19791209306643 | John | Sen | 2011-07-27 17:48:01.487+00 | 33
  67. -- 35184372090954 | Arun | Chopra | 2012-10-25 02:12:07.425+00 | 33
  68. -- 6597069771115 | Ami | Chatterjee | 2010-08-30 16:00:52.716+00 | 32
  69. -- 6597069774644 | Zhang | Chen | 2010-08-02 13:39:20.452+00 | 32
  70. -- 6597069777069 | Wei | Wang | 2010-08-06 01:42:36.282+00 | 32
  71. -- 13194139543607 | A. | Khan | 2011-02-06 23:23:19.378+00 | 32
  72. -- 21990232559935 | Meera | Kapoor | 2011-09-23 11:55:58.941+00 | 32
  73. -- 21990232565605 | Prakash | Price | 2011-11-06 07:17:04.122+00 | 32
  74. -- 26388279076723 | Deepak | Kumar | 2012-02-10 18:26:21.335+00 | 32
  75. -- 28587302331910 | Isabel | Reyes | 2012-04-27 03:16:45.436+00 | 32
  76. -- 30786325588075 | Anupam | Rao | 2012-06-23 10:16:17.317+00 | 32
  77. -- 32985348843444 | Wei | Chen | 2012-07-30 09:52:43.39+00 | 32
  78. -- 10281 | James | Raghu | 2010-01-13 12:20:03.403+00 | 31
  79. -- 6597069768018 | Rahul | Singh | 2010-07-24 22:08:17.051+00 | 31
  80. -- 13194139534180 | Arjun | Khan | 2011-01-27 17:05:31.134+00 | 31
  81. -- 13194139539554 | K. | Sharma | 2011-01-17 09:20:04.865+00 | 31
  82. -- 13194139543101 | Shweta | Kapoor | 2011-02-09 09:48:05.32+00 | 31
  83. -- 19791209302082 | K. | Kumar | 2011-09-01 10:14:27.166+00 | 31
  84. -- 19791209304789 | Amit | Rao | 2011-08-13 06:55:48.125+00 | 31
  85. -- 26388279071096 | Prakash | Khan | 2012-02-01 00:18:37.691+00 | 31
  86. -- 30786325582257 | Ashok | Sharma | 2012-05-12 07:08:40.547+00 | 31
  87. -- 2435 | Bibit | Balawan | 2010-01-23 23:37:20.444+00 | 30
  88. -- 2199023261346 | Peng | Li | 2010-04-28 01:12:38.381+00 | 30
  89. -- 4398046517801 | Jun | Wang | 2010-06-01 17:59:47.303+00 | 30
  90. -- 8796093029212 | Jie | Zhang | 2010-11-01 23:57:40.37+00 | 30
  91. -- 15393162789525 | Albaye Papa | Faye | 2011-03-22 05:03:56.918+00 | 30
  92. -- 21990232561857 | Paul | Clerc | 2011-10-22 00:12:31.924+00 | 30
  93. -- 26388279076501 | Chen | Li | 2012-01-12 20:31:19.036+00 | 30
  94. -- 28587302327643 | Deepak | Reddy | 2012-03-19 22:38:23.233+00 | 30
  95. -- 30786325579031 | Amir | Lee | 2012-05-22 16:12:22.233+00 | 30
  96. -- 30786325580998 | John | Singh | 2012-05-20 13:27:29.263+00 | 30
  97. -- 30786325581320 | Deepak | Roy | 2012-05-17 11:23:42.909+00 | 30
  98. -- 30786325583499 | Ashok | Reddy | 2012-05-18 16:26:08.414+00 | 30
  99. -- 35184372094081 | Faisal | Malik | 2012-09-28 16:29:51.372+00 | 30
  100. -- 3903 | Wei | Li | 2010-02-03 08:12:07.624+00 | 29
  101. -- 2199023258884 | Peng | Chen | 2010-03-18 21:51:12.03+00 | 29
  102. -- 6597069767028 | Grigore | Bologan | 2010-08-19 23:12:33.496+00 | 29
  103. -- 6597069772286 | Arun | Rao | 2010-08-22 17:43:58.802+00 | 29
  104. -- 6597069775770 | Pol | Nath | 2010-08-06 17:28:25.712+00 | 29
  105. -- 8796093032553 | Priyanka | Singh | 2010-10-14 18:38:00.87+00 | 29
  106. -- 10995116282430 | Batong | Tran | 2011-01-02 03:43:55.824+00 | 29
  107. -- 10995116282865 | Ashok | Khan | 2010-11-26 06:29:03.99+00 | 29
  108. -- 10995116286396 | Yang | Li | 2010-12-25 12:16:40.949+00 | 29
  109. -- (100 rows)
  110. --
  111. -- Time: 40116.090 ms (00:40.116)
  112. --
  113. -- BEFORE REWRITING:
  114. -- materialize=> \i q04.sql
  115. -- CREATE MATERIALIZED VIEW
  116. -- Time: 791.930 ms
  117. -- CREATE INDEX
  118. -- Time: 349.982 ms
  119. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-20 18:17:02.072258+00
  120. -- HINT: The cluster replica may be restarting or going offline.
  121. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-20 18:17:07.113753+00
  122. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-20 22:19:42.544537+00
  123. -- HINT: The cluster replica may be restarting or going offline.
  124. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-20 22:19:47.566627+00
  125. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-21 01:54:04.832211+00
  126. -- HINT: The cluster replica may be restarting or going offline.
  127. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-21 01:54:09.850194+00
  128. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-21 05:49:35.058072+00
  129. -- HINT: The cluster replica may be restarting or going offline.
  130. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-21 05:49:40.109144+00
  131. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-21 08:42:54.897804+00
  132. -- HINT: The cluster replica may be restarting or going offline.
  133. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-21 08:42:59.928996+00
  134. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-21 12:02:54.517557+00
  135. -- HINT: The cluster replica may be restarting or going offline.
  136. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-21 12:02:59.559505+00
  137. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "offline" at 2023-07-21 13:30:02.559734+00
  138. -- HINT: The cluster replica may be restarting or going offline.
  139. -- psql:q04.sql:63: NOTICE: cluster replica default.r1 changed status to "online" at 2023-07-21 13:30:07.566586+00
  140. -- ^CCancel request sent
  141. -- psql:q04.sql:63: ERROR: canceling statement due to user request
  142. -- Time: 93951684.641 ms (1 d 02:05:51.685)
  143. /* Q4. Top message creators by country
  144. \set date '\'2012-09-01\''::timestamp
  145. */
  146. CREATE OR REPLACE MATERIALIZED VIEW Top100PopularForumsQ04 AS
  147. SELECT
  148. T.id AS id,
  149. Forum.creationdate AS creationDate,
  150. T.maxNumberOfMembers AS maxNumberOfMembers
  151. FROM (SELECT
  152. ForumId AS id,
  153. MAX(numberOfMembers) AS maxNumberOfMembers
  154. FROM (SELECT
  155. Forum_hasMember_Person.ForumId AS ForumId,
  156. count(Person.id) AS numberOfMembers,
  157. City.PartOfCountryId AS CountryId
  158. FROM Forum_hasMember_Person
  159. JOIN Person
  160. ON Person.id = Forum_hasMember_Person.PersonId
  161. JOIN City
  162. ON City.id = Person.LocationCityId
  163. GROUP BY City.PartOfCountryId, Forum_hasMember_Person.ForumId)
  164. ForumMembershipPerCountry
  165. GROUP BY ForumId) T, Forum
  166. WHERE T.id = Forum.id;
  167. CREATE INDEX Top100PopularForumsQ04_id ON Top100PopularForumsQ04 (id);
  168. WITH
  169. Top100_Popular_Forums AS (
  170. SELECT id, creationDate, maxNumberOfMembers
  171. FROM Top100PopularForumsQ04
  172. WHERE creationDate > :date
  173. ORDER BY maxNumberOfMembers DESC, id
  174. LIMIT 100
  175. ),
  176. au AS (
  177. SELECT *
  178. FROM Person
  179. WHERE EXISTS (SELECT 1
  180. FROM Top100_Popular_Forums
  181. INNER JOIN Forum_hasMember_Person
  182. ON Forum_hasMember_Person.ForumId = Top100_Popular_Forums.id
  183. WHERE Forum_hasMember_Person.PersonId = Person.id)
  184. ),
  185. Top100_Message AS (
  186. SELECT MessageId,
  187. CreatorPersonId
  188. FROM Message
  189. WHERE Message.ContainerForumId IN (SELECT id FROM Top100_Popular_Forums)
  190. )
  191. SELECT au.id AS "person.id"
  192. , au.firstName AS "person.firstName"
  193. , au.lastName AS "person.lastName"
  194. , au.creationDate
  195. -- a single person might be member of more than 1 of the top100 forums, so their messages should be DISTINCT counted
  196. , COUNT(Top100_Message.MessageId) AS messageCount
  197. FROM au
  198. LEFT JOIN Top100_Message
  199. ON au.id = Top100_Message.CreatorPersonId
  200. GROUP BY au.id, au.firstName, au.lastName, au.creationDate
  201. ORDER BY messageCount DESC, au.id
  202. LIMIT 100
  203. ;