【问题标题】:SQL Order by Results CountSQL 按结果计数排序
【发布时间】:2019-11-09 18:26:30
【问题描述】:

我有一个表格,其中包含如下数据:

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'";

但是我如何将唯一的个人香蕉食者排序为他们自己的条目,然后按吃得最多的人排序结果?

【问题讨论】:

    标签: mysql sql database sql-order-by


    【解决方案1】:

    按子分组并使用条件聚合:

    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 
    

    请参阅demo

    【讨论】:

      【解决方案2】:

      用例当

      select child,sum(case when Fruit='Banana' then 1 else 0 end) as bananaeaten
      from meals
      group by child
      order by bananaeaten desc
      

      【讨论】:

        【解决方案3】:
        select Child, count(*) as 'Number of bananas eaten' from meals
        where Fruit = 'Banana'
        group by Child
        order by count(*) desc
        

        【讨论】:

        • 您的陈述中缺少一个 from 和一些解释
        【解决方案4】:

        如果你不想看到“孩子B”,那么在聚合之前过滤:

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

        【讨论】:

          猜你喜欢
          • 2012-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 2011-09-28
          • 1970-01-01
          相关资源
          最近更新 更多