Порядок SQL по количеству результатов - PullRequest
1 голос
/ 09 ноября 2019

У меня есть таблица с данными, подобными следующим:

Meal ID   |   Child    |  Fruit

1              Child A     Apple
2              Child B     Orange
3              Child A     Banana
4              Child A     Orange
5              Child C     Banana
6              Child A     Banana
7              Child C     Banana
8              Child A     Banana

, и мне нужно упорядочить результаты, от наивысшего к низшему, на основе съеденных фруктов, например, если поисковым запросом является банан, результатыбудет отображаться следующим образом:

Banana Eaters (Highest to Lowest)

Child   |   Number of Bananas eaten

Child A     3
Child C     1

Я бы начал с:

 $sql = "SELECT * FROM meals WHERE Fruit = 'Banana'";

Но как мне отсортировать уникальных отдельных Пожирателей бананов как их собственную запись, а затем упорядочить результаты поте, кто ел больше всего?

Ответы [ 4 ]

1 голос
/ 09 ноября 2019

вариант использования, когда

select child,sum(case when Fruit='Banana' then 1 else 0 end) as bananaeaten
from meals
group by child
order by bananaeaten desc
1 голос
/ 09 ноября 2019
select Child, count(*) as 'Number of bananas eaten' from meals
where Fruit = 'Banana'
group by Child
order by count(*) desc
1 голос
/ 09 ноября 2019

Группируйте по ребенку и используйте условное агрегирование:

select child, sum(fruit = 'Banana') `Number of Bananas eaten`
from meals
group by child
order by `Number of Bananas eaten` desc 

Если вы хотите исключить детей, у которых не было бананов:

select child, sum(fruit = 'Banana') `Number of Bananas eaten`
from meals
group by child
having `Number of Bananas eaten` > 0
order by `Number of Bananas eaten` desc 

См. Демонстрационную версию .

0 голосов
/ 09 ноября 2019

Если вы не хотите видеть «Дочерний Б», то отфильтруйте перед агрегацией:

select Child, count(*) as num_bananas
from meals
where Fruit = 'Banana'
group by Child
order by count(*) desc;
...