我有一个看起来像这样的表:
+----+-------+
| 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
的数量(如果分隔列表中存在重复项):select s.colx, count(distinct t.id) cnt
from mytable t
cross join unnest(split(t.col2, ',')) as s(colx)
group by s.colx
关于sql - SQL:按相似值对结果进行计数和分组的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60218813/