1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- \set datetime '\'2010-06-11T09:21:46.000+00:00\'::TIMESTAMP'
- -- materialize=> \i q01.sql
- -- messageyear | iscomment | lengthcategory | messagecount | averagemessagelength | summessagelength | percentageofmessages
- -- -------------+-----------+----------------+--------------+----------------------+------------------+-------------------------------------------
- -- 2010 | f | 2 | 5906 | 105.26684727395869 | 621706 | 0.198301044219856965382936574555954739281
- -- 2010 | f | 3 | 688 | 202.6627906976744 | 139432 | 0.023100426417755095188530369673975086459
- -- 2010 | t | 0 | 334 | 4.12874251497006 | 1379 | 0.011214451196991572373501662021958835577
- -- 2010 | t | 1 | 57 | 76.59649122807018 | 4366 | 0.001913843467750058758352080045663633616
- -- 2010 | t | 2 | 94 | 94.35106382978724 | 8869 | 0.003156162911728167075177114461269851929
- -- 2010 | t | 3 | 5 | 171.4 | 857 | 0.000167881005942987610381761407514353826
- -- (6 rows)
- --
- -- Time: 1637056.825 ms (27:17.057)
- /* Q1. Posting summary
- \set datetime '\'2011-12-01T00:00:00.000+00:00\''::timestamp
- */
- WITH
- message_count AS (
- SELECT 0.0 + count(*) AS cnt
- FROM Message
- WHERE creationDate < :datetime
- )
- , message_prep AS (
- SELECT extract(year from creationDate) AS messageYear
- , ParentMessageId IS NOT NULL AS isComment
- , CASE
- WHEN length < 40 THEN 0 -- short
- WHEN length < 80 THEN 1 -- one liner
- WHEN length < 160 THEN 2 -- tweet
- ELSE 3 -- long
- END AS lengthCategory
- , length
- FROM Message
- WHERE creationDate < :datetime
- AND content IS NOT NULL
- )
- SELECT messageYear, isComment, lengthCategory
- , count(*) AS messageCount
- , avg(length::bigint) AS averageMessageLength
- , sum(length::bigint) AS sumMessageLength
- , count(*) / mc.cnt AS percentageOfMessages
- FROM message_prep
- , message_count mc
- GROUP BY messageYear, isComment, lengthCategory, mc.cnt
- ORDER BY messageYear DESC, isComment ASC, lengthCategory ASC
- ;
|