Impala/SQL - 可以利用 GROUP_CONCAT 和 COUNT > 1 的查询
Posted
技术标签:
【中文标题】Impala/SQL - 可以利用 GROUP_CONCAT 和 COUNT > 1 的查询【英文标题】:Impala/SQL - Query that can utilise GROUP_CONCAT and COUNT > 1 【发布时间】:2021-10-30 17:51:40 【问题描述】:我正在寻找一种可以利用 GROUP_CONCAT 和 COUNT 的变通方法;这将带回某个类别(在本例中为 i_id,其中 c_num > 1)。请看下面:
--
选择
A1.i_id,
group_concat(DISTINCT(cast(A1.c_num as STRING)))
group_concat(DISTINCT(cast(A1.type as STRING)))
来自 A1 ;
i_id | c_num | type |
---|---|---|
1 | 1 | I |
1 | 10 | J |
2 | 15 | I |
2 | 16 | I |
3 | 3 | I |
4 | 4 | I |
我希望获得以下输出:
i_id | c_num | type |
---|---|---|
1 | 1,10 | I,J |
2 | 15,16 | I |
但我得到的是:
i_id | c_num | type |
---|---|---|
1 | 1, 10 | I,J |
2 | 15, 16 | I |
3 | 3 | I |
4 | 4 | I |
本质上,我希望在有 2 个或更多 c_num 计数的情况下恢复 i_id。感谢您的帮助或任何建议的解决方法。
【问题讨论】:
【参考方案1】:您似乎希望结果集中的i_id
s 有不止一行。只需使用having
:
SELECT A1.i_id,
group_concat(DISTINCT(cast( A1.c_num as STRING)))
group_concat(DISTINCT(cast(A1.type as STRING)))
FROM A1
GROUP BY A1.i_id
HAVING COUNT(*) > 1;
如果您特别想要超过c_num
的值,请使用:
HAVING COUNT(DISTINCT c_num) > 1
【讨论】:
非常感谢戈登的帮助!【参考方案2】:您可以创建一个子查询来确定多个实例并将其与原始表连接以用作过滤器。
select
group_concat(DISTINCT(cast( A1.c_num as STRING)))
from
A1
join
(select a1.id as a1_id, count(*) from A1 group by a1.id having count(*)>1) cnt_gt_1
ON A1.id =cnt_gt_1.a1_id
这里的子查询 cnt_gt_1
将在您有两行或多行的地方带来数据 - 当您加入主表时,您将获得两行或多行的所有行。
【讨论】:
以上是关于Impala/SQL - 可以利用 GROUP_CONCAT 和 COUNT > 1 的查询的主要内容,如果未能解决你的问题,请参考以下文章