On Sun, Aug 25, 2013 at 5:59 PM, Janek Sendrowski <jane...@web.de> wrote:

> SELECT  v_rec1.user,
>         sum(CASE WHEN v_rec_fts.lev BETWEEN 0 AND 25 THEN 1 ELSE 0 END) as
> "0 to 25",
>         sum(CASE WHEN v_rec_fts.lev BETWEEN 25 AND 50 THEN 1 ELSE 0 END)
> as "25 to 50",
>         sum(CASE WHEN v_rec_fts.lev BETWEEN 50 AND 100 THEN 1 ELSE 0 END)
> as "50 to 100"
>         INTO v_rec2
>         GROUP BY user;
>
> Now I want to summuarize the "0 to 25" values and the others in the same
> query.
> Somehow like this: count("0 to 25")
> But I want to do it with every single user and I don't know how to do that
>
> A result should look like this:
>
> user      percentage    count
> smith     "0 to 25"     5
> smith     "25 to 50"    7
> smith     "50 to 75"    2
> jones     "0 to 25"     11
> jones     "25 to 50"    1
> jones     "50 to 75"    3
>
>
This appears to be some kind of equal interval problem.

SELECT  v_rec1.user,
        WIDTH_BUCKET(v_rec_fts.lev, 0, 100, 4) AS bucket
        COUNT(*) as count,
FROM v_rec2
GROUP BY user, bucket;

(Untested, but this should be the gist.)

Bucket 1 would be 0 to 25, bucket 2 is 25 to 50, 3 is 50 to 75, 4 is 75 to
100. If you really need to change the bucket number to some kind of text,
you can probably nest this query inside another that uses a CASE to pick
the text based on on the bucket number.

Good luck.

Reply via email to