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
我正在寻找可以利用 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