On 6 September 2016 at 15:19, Alexander Farber <alexander.far...@gmail.com>
wrote:

> Hello Charles and other, please excuse my stupidity, but -
>
> On Tue, Sep 6, 2016 at 2:52 PM, Charles Clavadetscher <
> clavadetsc...@swisspug.org> wrote:
>
>>
>> You must group by played, as the message suggests. You are implicitly
>> selecting the column through order by, although you don't have it in the
>> list of selected columns.
>>
>>
>
> Here I have 7 "skip" events for gid=3 ("game id") in the table:
>
> words=> select mid, action, gid, uid from words_moves order by played desc;
>  mid | action | gid | uid
> -----+--------+-----+-----
>   15 | skip   |   3 |   1
>   14 | skip   |   3 |   2
>   13 | skip   |   3 |   1
>   12 | skip   |   3 |   2
>   11 | skip   |   3 |   1
>   10 | skip   |   3 |   2
>    9 | skip   |   3 |   1
>    6 | play   |   3 |   2
>    5 | play   |   4 |   1
>    3 | swap   |   3 |   1
>    2 | play   |   2 |   1
>    1 | play   |   1 |   1
> (12 rows)
>
> And then I try the suggestion I got in this mailing list:
>
> words=>         SELECT SUM(CASE WHEN action='skip' THEN 1 ELSE 0 END)
> words->         FROM words_moves
> words->         WHERE gid = 3
> words->         GROUP BY played
> words->         ORDER BY played DESC
> words->         LIMIT 6;
>  sum
> -----
>    1
>    1
>    1
>    1
>    1
>    1
> (6 rows)
>
> I guess I need ASC in the last statement, but main problem is how to get
> the total sum...
>
> Regards
> Alex
>
>
My bad. I didn't pay attention.

Of course you need the played field you relied on it in the order by
clause. You can use the result of a select in a from clause of another
select.

SELECT SUM(skips) from (SELECT CASE WHEN action='skip' THEN 1 ELSE 0 END as
skips, played
         FROM words_moves
         WHERE gid = 3
         ORDER BY played DESC
         LIMIT 6) as skipscount;

And now I really hope, I didn't miss something important again!

Regards,
Sándor

Reply via email to