q01.sql 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. \set datetime '\'2010-06-11T09:21:46.000+00:00\'::TIMESTAMP'
  2. -- materialize=> \i q01.sql
  3. -- messageyear | iscomment | lengthcategory | messagecount | averagemessagelength | summessagelength | percentageofmessages
  4. -- -------------+-----------+----------------+--------------+----------------------+------------------+-------------------------------------------
  5. -- 2010 | f | 2 | 5906 | 105.26684727395869 | 621706 | 0.198301044219856965382936574555954739281
  6. -- 2010 | f | 3 | 688 | 202.6627906976744 | 139432 | 0.023100426417755095188530369673975086459
  7. -- 2010 | t | 0 | 334 | 4.12874251497006 | 1379 | 0.011214451196991572373501662021958835577
  8. -- 2010 | t | 1 | 57 | 76.59649122807018 | 4366 | 0.001913843467750058758352080045663633616
  9. -- 2010 | t | 2 | 94 | 94.35106382978724 | 8869 | 0.003156162911728167075177114461269851929
  10. -- 2010 | t | 3 | 5 | 171.4 | 857 | 0.000167881005942987610381761407514353826
  11. -- (6 rows)
  12. --
  13. -- Time: 1637056.825 ms (27:17.057)
  14. /* Q1. Posting summary
  15. \set datetime '\'2011-12-01T00:00:00.000+00:00\''::timestamp
  16. */
  17. WITH
  18. message_count AS (
  19. SELECT 0.0 + count(*) AS cnt
  20. FROM Message
  21. WHERE creationDate < :datetime
  22. )
  23. , message_prep AS (
  24. SELECT extract(year from creationDate) AS messageYear
  25. , ParentMessageId IS NOT NULL AS isComment
  26. , CASE
  27. WHEN length < 40 THEN 0 -- short
  28. WHEN length < 80 THEN 1 -- one liner
  29. WHEN length < 160 THEN 2 -- tweet
  30. ELSE 3 -- long
  31. END AS lengthCategory
  32. , length
  33. FROM Message
  34. WHERE creationDate < :datetime
  35. AND content IS NOT NULL
  36. )
  37. SELECT messageYear, isComment, lengthCategory
  38. , count(*) AS messageCount
  39. , avg(length::bigint) AS averageMessageLength
  40. , sum(length::bigint) AS sumMessageLength
  41. , count(*) / mc.cnt AS percentageOfMessages
  42. FROM message_prep
  43. , message_count mc
  44. GROUP BY messageYear, isComment, lengthCategory, mc.cnt
  45. ORDER BY messageYear DESC, isComment ASC, lengthCategory ASC
  46. ;