【问题标题】:Impala/SQL - Query that can utilise GROUP_CONCAT and COUNT > 1Impala/SQL - 可以利用 GROUP_CONCAT 和 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。感谢您的帮助或任何建议的解决方法。

【问题讨论】:

    标签: sql hadoop count impala group-concat


    【解决方案1】:

    您似乎希望结果集中的i_ids 有不止一行。只需使用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 将在您有两行或多行的地方带来数据 - 当您加入主表时,您将获得两行或多行的所有行。

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2020-12-21
      • 2011-11-01
      • 2016-07-16
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多