【问题标题】:SQL Group By custom range?SQL Group By自定义范围?
【发布时间】:2014-10-19 08:16:50
【问题描述】:

我有一张存储披萨订单的桌子。该表有一个称为数量的值;该特定顺序的比萨饼数量。我需要“创建一个查询来获取订单中不同披萨数量的订单分布。问题指出”您的 sql 查询应该计算具有以下披萨数量的订单数量:1、2、3、4、5, 6 及以上 6"。经过一段时间的研究,我想出了这个查询,但它没有按我想要的方式工作。这是查询及其结果。提前致谢。

SELECT CASE 
    WHEN Quantity = 1 THEN '1 ' 
    WHEN Quantity = 2 THEN '2' 
    WHEN Quantity = 3 THEN '3 ' 
    WHEN quantity = 4 THEN '4' 
    WHEN quantity = 5 THEN '5 '  
    WHEN quantity = 6 THEN '6' 
    ELSE '>6' 
    END AS Range, COUNT(Quantity) AS Amount
FROM  orders
GROUP BY Quantity

这个输出:

Range     Amount
1         2
2         3
3         3
4         4
5         5
6         1
>6        1
>6        2
>6        2
>6        1

我将如何对 >6 范围进行分组并计算数量。这样它就在一个“> 6”条目下?

【问题讨论】:

  • 你能用“范围”而不是数量来分组吗..
  • 请选择一个平台。您使用的是 MySQL 还是 SQL Server?它们是不同的 - 在将标签应用于您的问题之前,您是否阅读过有关标签的任何内容?

标签: sql sql-server select case


【解决方案1】:

一种可能的方法是对GROUP BY 子句使用相同的CASE WHEN 语句,例如*:

SELECT CASE 
    WHEN Quantity <= 6 THEN CAST(Quantity as VARCHAR(1))
    ELSE '>6' 
    END AS Range, COUNT(Quantity) AS Amount
FROM  orders
GROUP BY (CASE 
    WHEN Quantity <= 6 THEN CAST(Quantity as VARCHAR(1))
    ELSE '>6' 
    END)        

*) 使用原始CASE WHEN 语句的简化版本。用 SQL Server 风格的 SQL 编写。

【讨论】:

    【解决方案2】:

    运行此查询而不是之前的查询:

    SELECT CASE 
    WHEN Quantity = 1 THEN '1 ' 
    WHEN Quantity = 2 THEN '2' 
    WHEN Quantity = 3 THEN '3 ' 
    WHEN quantity = 4 THEN '4' 
    WHEN quantity = 5 THEN '5 '  
    WHEN quantity = 6 THEN '6' 
    ELSE '>6' 
    END AS Range, COUNT(Quantity) AS Amount
    FROM  orders
    GROUP BY Range
    

    【讨论】:

    • 这会出现错误 - 列名无效(范围)
    • 动态评估的列(如此查询中的Range)在GROUP BY 子句中不会被识别,因此此查询甚至不会运行
    • @Riad,对不起,问题似乎是关于 SQL-Server,而不是 MySQL。 OP 标记不正确。我编辑了问题并删除了 mysql 标签。
    • Alex94,这就是为什么您应该使用适当的 DBMS 标记您的问题 - 而不是其他任何问题。 MySQL 与 SQL-Server 不同。
    【解决方案3】:

    SELECT IF(Quantity > 6,'>6',Quantity) AS Range, (Quantity*Amount) AS Amount 来自订单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多