sql - SQL:按相似值对结果进行计数和分组的有效方法
问题描述
我有一个看起来像这样的表:
+----+-------+
| id | col2 |
+----+-------+
| 1 | a |
| 2 | b |
| 3 | ,b |
| 4 | c |
| 5 | d,a |
| 6 | e,a,b |
+----+-------+
查询它并返回以下内容的最有效方法是什么?
+------+----------+
| col1 | count_id |
+------+----------+
| a | 3 |
| b | 3 |
| c | 1 |
| d | 1 |
| e | 1 |
+------+----------+
我正在考虑使用case when
语句,但它似乎很乱。
解决方案
在 Presto 中,您可以将分隔列表拆分为一个数组,然后取消嵌套该数组。这会为每个列表中的每个元素提供一条记录。剩下的只是聚合:
select s.colx, count(*) cnt
from mytable t
cross join unnest(split(t.col2, ',')) as s(colx)
group by s.colx
如果您想要不同 id
s 的计数(如果分隔列表中有重复项):
select s.colx, count(distinct t.id) cnt
from mytable t
cross join unnest(split(t.col2, ',')) as s(colx)
group by s.colx
推荐阅读
- reactjs - React 并发模式是否允许派生状态?
- angular - 从数组列表的第一行以角度显示
- python - 根据其他两列的值将值应用于列
- django - Django Rest 框架中的自定义用户模型注册
- node.js - MongoDb / 查找 + 更新文档
- heroku - 如何防止 Heroku H12 在 Java REST 服务器上长时间运行进程的“请求超时”
- python - 运行多个或选择性 python 脚本的 shell 脚本
- xpath - 我如何才能在下表中找到仅用于“总病例”的 xpath 或 CSS 选择器(url =this https://www.worldometers.info/coronavirus/)
- javascript - 反应循环并创建元素
- java - java - 如何为其模型中文本的不同代码点自定义Java 9+ JTextField的视图?