【问题标题】:How To include row when using HAVING COUNT(*) = 1 BiqQuery使用 HAVING COUNT(*) = 1 BigQuery 时如何包含行
【发布时间】:2021-03-12 22:41:51
【问题描述】:

我有一个包含 30 多列的 bigQuery 表,我想 SELECT * 其中 session 是唯一的。

我有这个问题:

SELECT *
FROM `table.id`
WHERE session IN (
    SELECT session
    FROM `table.id`
    GROUP BY session
    HAVING COUNT(*) = 1
)

它有效,但我刚刚从另一个问题中得知HAVING COUNT(*) = 1 排除了重复的行:

请注意,DISTINCT 用于显示不同的记录,包括来自重复的 1 条记录。另一方面, HAVING COUNT() = 1 只检查不重复的记录。 举个简单的例子,如果会话有:1、1、2、3 DISTINCT 将导致:1、2、3 HAVING COUNT() = 1 将导致:2, 3

我需要DISTINCT 结果,即包含一个重复项的结果。

有人可以帮助我吗?提前感谢,亲切的问候

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    也许ROW_NUMBER

    SELECT *
    FROM (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY session) as row_num
      FROM `table.id`
    )
    WHERE row_num = 1
    

    【讨论】:

    • 感谢您的回答!它不起作用,当我运行 SELECT COUNT(DISTINCT sessions) 时,它给了我 1023 个条目,而当我运行 SELECT *FROM `table.id` WHERE session IN ( SELECT DISTINCT sessionFROM `table.id`) 时,它给了我更多条目......
    • 那么可能是ROW_NUMBER?
    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多