Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL: count occurrences of values

Let

user | fruit
------------
1    | apple
1    | apple
1    | apple
2    | apple
2    | apple
1    | pear

Trying to combine count and group by to get

user | apples | pears
---------------------
1    | 3      | 1
2    | 2      | 0

Any hints on how to proceed are appreciated.

like image 482
echo Avatar asked Mar 12 '23 11:03

echo


2 Answers

Use case expressions to do conditional counting:

select user,
       count(case when fruit = 'apple' then 1 end) as apples,
       count(case when fruit = 'pear' then 1 end) as pears
from tablename
group by user
like image 160
jarlh Avatar answered Mar 15 '23 14:03

jarlh


If you´re working on an Oracle, you would use the PIVOT-function:

SELECT *
  FROM fruit t
 PIVOT (COUNT(fruit) AS cnt 
          FOR(fruit) IN ('apple' AS apple
                       , 'pear' AS pear) );

More details and full samples on PIVOT / UNPIVOT you´ll find in the web (f.e. here https://oracle-base.com/articles/11g/pivot-and-unpivot-operators-11gr1 )

like image 24
oratom Avatar answered Mar 15 '23 16:03

oratom