Thank you Adrian, but - On Fri, Nov 29, 2019 at 6:45 PM Adrian Klaver <adrian.kla...@aklaver.com> wrote:
> On 11/29/19 8:38 AM, Alexander Farber wrote: > > > > CREATE OR REPLACE FUNCTION words_list_puzzles( > > in_start interval, > > in_end interval > > > > ) RETURNS TABLE ( > > out_label text, > > out_count bigint, > > out_puzzle boolean, > > out_mid bigint, > > out_secret text, > > out_gid integer, > > out_score integer > > ) AS > > $func$ > > > > SELECT > > TO_CHAR(played, 'Mon YYYY') AS label, > > COUNT(NULLIF(puzzle, FALSE)), -- this only returns 0 or 1, why? > > If I am following it is because you have mid in GROUP BY and mid is a > PK. Since mid will always be unique you will have at most on row per group. > > > puzzle, > > mid, > > MD5(mid || ‘my little secret’) AS secret, > > gid, > > score > > > > FROM words_moves > > WHERE action = 'play' > > AND LENGTH(hand) = 7 > > AND (LENGTH(letters) = 7 OR score > 90) > > AND played > CURRENT_TIMESTAMP - in_start > > AND played < CURRENT_TIMESTAMP - in_end > > GROUP BY label, puzzle, mid, secret, gid, score > > ORDER BY played DESC > > > > $func$ LANGUAGE sql STABLE; > > > > But when I run it, I only get 0 or 1 in the out_count column: > > > > words_ru=> select * from words_list_puzzles(interval '2 year', interval > > '1 year'); > > out_label | out_count | out_puzzle | out_mid | out_secret > > | out_gid | out_score > > > -----------+-----------+------------+---------+----------------------------------+---------+----------- > > Nov 2018 | 0 | f | 1326876 | > > e4928d3c34f50b8e6eabf7bad5b932fe | 46007 | 28 > > Nov 2018 | 0 | f | 1324466 | > > 6228ba509a7124f485feb5c1acbb6b68 | 45922 | 26 > > Nov 2018 | 0 | f | 1322050 | > > b67b091d383678de392bf7370c735cab | 45877 | 34 > > Nov 2018 | 0 | f | 1320017 | > > 35f03b0c7159cec070c00aa80359fd42 | 44255 | 120 > > Nov 2018 | 0 | f | 1319160 | > > 83df42f7ad398bbb060fc02ddfdc62c0 | 45031 | 95 > > ..... > > May 2018 | 0 | f | 264251 | > > 2fff1154962966b16a2996387e30ae7f | 10946 | 99 > > May 2018 | 1 | t | 257620 | > > 645613db6ea40695dc967d8090ab3246 | 12713 | 93 > > May 2018 | 0 | f | 245792 | > > bb75bfd9cb443ff541b199d893c68117 | 12359 | 24 > > May 2018 | 1 | t | 243265 | > > d899a5d642ccd96d931194f48ef56d53 | 11950 | 123 > > May 2018 | 0 | f | 231953 | > > ad53b5b2c0d4cced3d50e8b44ad53e55 | 11910 | 32 > > > > - while I was hoping to get 2 for the "May 2018" section. > > > > What am I doing wrong please, why don't the values add up? Below is the > > table desc: > > > > words_ru=> \d words_moves > > Table "public.words_moves" > > Column | Type | Collation | Nullable | > > Default > > > ---------+--------------------------+-----------+----------+------------------------------------------ > > mid | bigint | | not null | > > nextval('words_moves_mid_seq'::regclass) > > action | text | | not null | > > gid | integer | | not null | > > uid | integer | | not null | > > played | timestamp with time zone | | not null | > > tiles | jsonb | | | > > score | integer | | | > > letters | text | | | > > hand | text | | | > > puzzle | boolean | | not null | false > > Indexes: > > "words_moves_pkey" PRIMARY KEY, btree (mid) > > "words_moves_gid_played_idx" btree (gid, played DESC) > > "words_moves_uid_action_played_idx" btree (uid, action, played) > > "words_moves_uid_idx" btree (uid) > > Check constraints: > > "words_moves_score_check" CHECK (score >= 0) > > Foreign-key constraints: > > "words_moves_gid_fkey" FOREIGN KEY (gid) REFERENCES > > words_games(gid) ON DELETE CASCADE > > "words_moves_uid_fkey" FOREIGN KEY (uid) REFERENCES > > words_users(uid) ON DELETE CASCADE > > Referenced by: > > TABLE "words_scores" CONSTRAINT "words_scores_mid_fkey" FOREIGN KEY > > (mid) REFERENCES words_moves(mid) ON DELETE CASCADE > > > > if I remove GROUP BY mid, then I get the error: ERROR: 42803: column "words_moves.mid" must appear in the GROUP BY clause or be used in an aggregate function LINE 18: mid, ^ LOCATION: check_ungrouped_columns_walker, parse_agg.c:1369 Regards Alex