q06.sql 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. \set tag '\'Bob_Geldof\''
  2. -- materialize=> \i q06.sql
  3. -- CREATE MATERIALIZED VIEW
  4. -- Time: 592.701 ms
  5. -- CREATE INDEX
  6. -- Time: 675.665 ms
  7. -- person1.id | authorityscore
  8. -- ----------------+----------------
  9. -- 10995116278639 | 65214
  10. -- 21990232559802 | 51479
  11. -- 32985348837247 | 50946
  12. -- 21990232556992 | 39017
  13. -- 26388279074760 | 39017
  14. -- 32985348842998 | 39017
  15. -- 17592186047799 | 30823
  16. -- 21990232558345 | 27912
  17. -- 2199023263408 | 20476
  18. -- 2199023262183 | 17492
  19. -- 10995116282476 | 16881
  20. -- 24189255818812 | 15441
  21. -- 19791209306646 | 9344
  22. -- 17592186054552 | 6769
  23. -- 21990232557756 | 5222
  24. -- 24189255813105 | 2204
  25. -- 28587302330494 | 2204
  26. -- 15393162793576 | 1699
  27. -- 10995116286814 | 1674
  28. -- 26388279073722 | 1559
  29. -- 6597069771930 | 856
  30. -- 19791209310240 | 831
  31. -- 24189255816982 | 815
  32. -- 7402 | 802
  33. -- 21990232564251 | 683
  34. -- 15393162796905 | 643
  35. -- 10995116283030 | 327
  36. -- 6597069774064 | 318
  37. -- 13194139537210 | 233
  38. -- 4398046518031 | 199
  39. -- 24189255818900 | 199
  40. -- 4398046514439 | 182
  41. -- 30786325580499 | 150
  42. -- 15393162789011 | 91
  43. -- 2199023260638 | 63
  44. -- 261 | 0
  45. -- 358 | 0
  46. -- 2239 | 0
  47. -- 2565 | 0
  48. -- 2662 | 0
  49. -- 2735 | 0
  50. -- 3283 | 0
  51. -- 3470 | 0
  52. -- 4478 | 0
  53. -- 4857 | 0
  54. -- 6444 | 0
  55. -- 7139 | 0
  56. -- 7780 | 0
  57. -- 9533 | 0
  58. -- 9802 | 0
  59. -- 9874 | 0
  60. -- 9995 | 0
  61. -- 2199023255976 | 0
  62. -- 2199023256108 | 0
  63. -- 2199023256625 | 0
  64. -- 2199023256642 | 0
  65. -- 2199023256826 | 0
  66. -- 2199023257601 | 0
  67. -- 2199023257639 | 0
  68. -- 2199023257807 | 0
  69. -- 2199023258092 | 0
  70. -- 2199023258884 | 0
  71. -- 2199023259874 | 0
  72. -- 2199023260517 | 0
  73. -- 2199023260815 | 0
  74. -- 2199023261231 | 0
  75. -- 2199023261845 | 0
  76. -- 2199023263286 | 0
  77. -- 2199023263756 | 0
  78. -- 2199023264003 | 0
  79. -- 2199023264490 | 0
  80. -- 2199023265878 | 0
  81. -- 4398046511484 | 0
  82. -- 4398046512578 | 0
  83. -- 4398046512589 | 0
  84. -- 4398046513036 | 0
  85. -- 4398046513439 | 0
  86. -- 4398046514321 | 0
  87. -- 4398046514865 | 0
  88. -- 4398046515379 | 0
  89. -- 4398046517444 | 0
  90. -- 4398046518040 | 0
  91. -- 4398046519441 | 0
  92. -- 4398046519890 | 0
  93. -- 4398046519964 | 0
  94. -- 4398046521053 | 0
  95. -- 4398046521089 | 0
  96. -- 6597069768666 | 0
  97. -- 6597069768950 | 0
  98. -- 6597069768955 | 0
  99. -- 6597069769047 | 0
  100. -- 6597069769684 | 0
  101. -- 6597069771425 | 0
  102. -- 6597069771666 | 0
  103. -- 6597069773566 | 0
  104. -- 6597069773673 | 0
  105. -- 6597069774528 | 0
  106. -- 6597069776460 | 0
  107. -- 6597069776679 | 0
  108. -- 8796093022752 | 0
  109. -- (100 rows)
  110. --
  111. -- Time: 30927.052 ms (00:30.927)
  112. CREATE OR REPLACE MATERIALIZED VIEW PopularityScoreQ06 AS
  113. SELECT
  114. message2.CreatorPersonId AS person2id,
  115. count(*) AS popularityScore
  116. FROM Message message2
  117. JOIN Person_likes_Message like2
  118. ON like2.MessageId = message2.MessageId
  119. GROUP BY message2.CreatorPersonId;
  120. CREATE INDEX PopularityScoreQ06_person2id ON PopularityScoreQ06 (person2id);
  121. /* Q6. Most authoritative users on a given topic
  122. \set tag '\'Arnold_Schwarzenegger\''
  123. */
  124. -- alternative version, with CTE to get a better plan
  125. WITH applicable_posts AS (
  126. SELECT message1.MessageId,
  127. message1.CreatorPersonId AS person1id
  128. FROM Tag
  129. JOIN Message_hasTag_Tag
  130. ON Message_hasTag_Tag.TagId = Tag.id
  131. JOIN Message message1
  132. ON message1.MessageId = Message_hasTag_Tag.MessageId
  133. WHERE Tag.name = :tag
  134. ),
  135. poster_w_liker AS (
  136. SELECT DISTINCT
  137. message1.person1id,
  138. like2.PersonId AS person2id
  139. FROM applicable_posts message1
  140. LEFT JOIN Person_likes_Message like2
  141. ON like2.MessageId = message1.MessageId
  142. -- we don't need the Person itself as its ID is in the like
  143. )
  144. SELECT pl.person1id AS "person1.id",
  145. sum(coalesce(ps.popularityScore, 0)) AS authorityScore
  146. FROM poster_w_liker pl
  147. LEFT JOIN PopularityScoreQ06 ps
  148. ON ps.person2id = pl.person2id
  149. GROUP BY pl.person1id
  150. ORDER BY authorityScore DESC, pl.person1id ASC
  151. LIMIT 100
  152. ;
  153. -- original umbra version, experiences filter pushdown anomalies
  154. /*
  155. WITH poster_w_liker AS (
  156. SELECT DISTINCT
  157. message1.CreatorPersonId AS person1id,
  158. like2.PersonId AS person2id
  159. FROM Tag
  160. JOIN Message_hasTag_Tag
  161. ON Message_hasTag_Tag.TagId = Tag.id
  162. JOIN Message message1
  163. ON message1.MessageId = Message_hasTag_Tag.MessageId
  164. LEFT JOIN Person_likes_Message like2
  165. ON like2.MessageId = message1.MessageId
  166. -- we don't need the Person itself as its ID is in the like
  167. WHERE Tag.name = :tag
  168. )
  169. SELECT pl.person1id AS "person1.id",
  170. sum(coalesce(ps.popularityScore, 0)) AS authorityScore
  171. FROM poster_w_liker pl
  172. LEFT JOIN PopularityScoreQ06 ps
  173. ON ps.person2id = pl.person2id
  174. GROUP BY pl.person1id
  175. ORDER BY authorityScore DESC, pl.person1id ASC
  176. LIMIT 100
  177. ;
  178. */