首页 > 解决方案 > 使用 HAVING COUNT(*) = 1 BiqQuery 时如何包含行

问题描述

我有一个包含 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

解决方案


也许ROW_NUMBER

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

推荐阅读