首页 > 解决方案 > SQL print 使用计数内的条件逐行计数

问题描述

我是 SQL 新手。我有一个数据表如下

+-----+-------+
|Name | value |
+-----+-------+
|AAA  |  25   |
|AAA  |  60   |
|BBB  |  40   |
|BBB  |  200  |
|CCC  |  1010 |
|CCC  |  451  |
|CCC  |  45   |
|DDD  |  20   |
+-----+-------+

我想要做的是获得以下输出

+-------+-------+
|Name   | COUNT |
+-------+-------+
|AAA    | 2     |
|DDD    | 1     |
|OTHERS | 5     |
+-------+-------+

我怎样才能在 SQL 中实现这一点???提前致谢

标签: sqlselectgroup-bycount

解决方案


您可以使用条件表达式:

select
    case when name = 'AAA' then name else 'OTHERS' end new_name,
    count(*) cnt
from mytable
group by case when name = 'AAA' then name else 'OTHERS' end

一些数据库(即 MySQL 和 MariaDB)支持在子句中复用定义在select子句中的列别名group by,因此可以将group by子句简化为:

group by new_name

其他数据库支持位置参数(Postgres 和 Oracle 是两个例子):

group by 1

推荐阅读