sql - 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 中实现这一点???提前致谢
解决方案
您可以使用条件表达式:
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
推荐阅读
- javascript - 对在哪里寻找@pnp 完整文档感到困惑
- javascript - 当我多次运行相同的函数时,我得到了多个 setInterval 实例?
- mysql - MySQL - Docker Image:如何等到表被填充后再启动下一个容器
- flutter - Flutter 同步 LocalDB 和 RemoteDB
- r - For循环对R中矩阵的每一列求和
- php - 按元数据字段查询产品的 SKU?
- php - 如何使用jquery计算php中两个日期之间的差异
- python - matplotlib 在带有 TkAgg 后端的 macOS 上的 plt.show() 中崩溃
- java - 使用 Spark 定义具有数字列表及其相关概率的随机变量
- c# - 在 ASP.NET Core App 中从 wwwroot 提供 SPA 时如何控制浏览器缓存过期