Impala/SQL - 可以利用 GROUP_CONCAT 且 COUNT > 1 的查询

Impala/SQL - Query that can utilise GROUP_CONCAT and COUNT > 1

我正在寻找可以利用 GROUP_CONCAT 和 COUNT 的解决方法;这是带回某个类别(在本例中 i_id,其中 c_num > 1)。请看下面:

--

SELECT

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

本质上,我希望恢复 i_id 有 2 个 c_num 或更多计数的地方。感谢您的帮助或任何建议的解决方法。

您可以创建一个子查询来确定多个实例并将其与原始 table 结合起来用作过滤器。

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 将把数据带到你有两行或更多行的地方 - 当你加入主查询 table 时,你会得到所有有两行或更多行的行。

您似乎希望结果集中有 i_id 个多行。只需使用 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