mysql - 您可以在提供 TOTAL 的 CASE 语句中添加另一行吗?

标签 mysql sql case

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

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中最简单的方法是使用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

关于mysql - 您可以在提供 TOTAL 的 CASE 语句中添加另一行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998397/

相关文章:

mysql - SQL 最长停留时间

mysql - 需要删除表中的重复条目 - 两个字段组合

sql - Postgres,选择条件

mysql - 使用 Case 和 Group By 按特定顺序获取分组结果

mysql - 如何通过水平滚动从数据库填充xamarin表单gridview数据

php - 在同一个查询中两次使用 INNER JOIN

sql - 连接两个表,然后连接第三个

SQL Server : is it possible to restrict a where clause to specific values in a pre-declared list

php - 如何在 JOIN 语句中使用 CASE 根据条件连接两个表?

python-mysqldb插入图像int值错误