【问题标题】:How to count the unique rows after aggregating to array聚合到数组后如何计算唯一行
【发布时间】:2019-08-29 08:34:43
【问题描述】:

尝试以只读方式解决问题。

我的表格(答案)如下所示:

|    user_id     |    value    |   
+----------------+-------------+
|       6        |    pizza    |       
|       6        |    tosti    | 
|       9        |    fries    | 
|       9        |    tosti    |
|      10        |    pizza    | 
|      10        |    tosti    |
|      12        |    pizza    |
|      12        |    tosti    |
|      13        |    sushi    |  -> did not finish the quiz.

注意:实际的表有 15+ 个不同的可能值。 (问题的答案)。


我已经能够创建下表:

|    value arr   |     count    |  user_id  |   
+----------------+--------------+-----------+
|  pizza, tosti  |       2      |     6     |
|  fries, tosti  |       2      |     9     |
|  pizza, tosti  |       2      |     10    |*
|  pizza, tosti  |       2      |     12    |*    
|     sushi      |       1      |     13    |

我不确定 * 行是否显示在我当前的查询中(DB 有 30k 行和 15+ 个值选项)。这里的问题是“计数”是计算答案的数量,而不是唯一结果的数量。

当前查询看起来有点像:

select string_agg(DISTINCT value, ',' order by value) AS value, user_id,
COUNT(DISTINCT value)
FROM answers
GROUP BY user_id;

寻找如下表所示的唯一答案组合:

|    value arr   | count unique |   
+----------------+--------------+
|  pizza, tosti  |       3      |       
|  fries, tosti  |       1      |
|     sushi      |       1      | --> Hidden in perfect situation.

尝试了一堆由工具编写和生成的查询。从超级简化到相当复杂,我一直在计算答案,而不是针对用户的独特组合。

如果这是一个重复的问题,请重新引导我。这几天学到了很多,但还没有找到答案。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    这就是您需要的。你快到了。

    select t1.value, count(1) From (
      select string_agg(DISTINCT value, ',' order by value) AS value, user_id
      FROM answers
      GROUP BY user_id) t1
    group by t1.value;
    

    【讨论】:

    • 你是我本周的英雄!添加了“WHERE (((answers.question_id) IN (5,9,11,12,13,15,17)))”,它就像一个魅力! ( where 部分不在我的问题中,所以你回答了我的问题!)。我对客户在尝试 2 天后询问它(对 SQL 来说真的很陌生)感到不满意,我很高兴我等了。我只了解您的查询的部分内容,一旦有时间,我将深入研究。非常感谢!
    【解决方案2】:

    你可以试试(这是针对 SQL Server 的):

    select count(*), string_agg(value, ",")
    within group (order by value) as count_unique
    from answers
    group by string_agg(value, ",")
    

    【讨论】:

    • 在 postgresql 数据库上使用 heroku 中的 dataclip 函数。即使在我将“,”更改为“,”之后,它也无法以某种方式工作(虽然我尝试了类似的查询确实有效)。感谢您的意见!
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多