【问题标题】:Can you add another row to a CASE statement that provides a TOTAL?您可以在提供 TOTAL 的 CASE 语句中添加另一行吗?
【发布时间】:2019-09-18 17:56:24
【问题描述】:

我想知道是否可以在我的 case 语句的最后一行添加一个 TOTAL 计数:

SELECT 
    CASE
        WHEN weight <= 10 THEN "very small"
        WHEN weight > 10 AND weight <= 30 THEN "small"
        WHEN weight > 30 AND weight <= 50 THEN "medium"
        WHEN weight > 50 AND weight <= 85 THEN "large"
        WHEN weight > 85 THEN "very large"
        END AS dog_weights, count(weight) as count
FROM dogs
GROUP BY dog_weights;

输出表格

| Dog_Weights | Count |
|-------------|-------|
| Very Small  | 20    |
| Small       | 20    |
| Medium      | 40    |
| Large       | 20    |

所需的表

| Dog_Weights | Count |
|-------------|-------|
| Very Small  | 20    |
| Small       | 20    |
| Medium      | 40    |
| Large       | 20    |
| Total       | 100   |

我会为此使用子查询吗?谢谢。

【问题讨论】:

标签: mysql sql case


【解决方案1】:

MySQL 中最简单的方法是使用rollup:

SELECT (CASE WHEN weight <= 10 THEN 'very small'
             WHEN weight > 10 AND weight <= 30 THEN 'small'
             WHEN weight > 30 AND weight <= 50 THEN 'medium'
             WHEN weight > 50 AND weight <= 85 THEN 'large'
             WHEN weight > 85 THEN 'very large'
         END) AS dog_weights,
        count(*) as count
FROM dogs
GROUP BY dog_weights WITH rollup;

要获得TOTAL,我认为你需要一个子查询:

假设weight 永远不是NULL,你可以这样做:

SELECT COALESCE(dog_weights, 'total') as dog_weights, count
FROM (SELECT (CASE WHEN weight <= 10 THEN 'very small'
                   WHEN weight > 10 AND weight <= 30 THEN 'small'
                   WHEN weight > 30 AND weight <= 50 THEN 'medium'
                   WHEN weight > 50 AND weight <= 85 THEN 'large'
                   WHEN weight > 85 THEN 'very large'
               END) AS dog_weights,
              count(*) as count
      FROM dogs
      GROUP BY dog_weights WITH rollup
     ) d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2011-02-08
    • 2022-10-23
    • 2018-01-30
    相关资源
    最近更新 更多