我有一个看起来像这样的表:

+----+-------+
| 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/

10-12 20:14