Bigquery SELECT * WHEN COUNT(DISTINCT value) 不起作用

Posted

技术标签:

【中文标题】Bigquery SELECT * WHEN COUNT(DISTINCT value) 不起作用【英文标题】:Bigquery SELECT * WHEN COUNT(DISTINCT value) does not work 【发布时间】:2021-03-11 15:38:41 【问题描述】:

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

我在 *** 中回答了几乎所有关于这个主题的问题,但没有一个帮助我达到预期的结果。

我试过SELECT COUNT(DISTINCT session) FROM table.id,但问题是只返回session 列,我需要整行。

然后我尝试了:

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

但它返回的行数比 SELECT COUNT(DISTINCT sessions) 少得多

所以按照逻辑我尝试了: SELECT *, COUNT(DISTINCT sessions)SELECT * WHERE COUNT(DISTINCT sessions)

没有用

有人可以帮忙吗?在此先感谢和亲切的问候,

【问题讨论】:

【参考方案1】:

我想 SELECT * 其中 session 是唯一的...

改用下面的 - 注意在COUNT(*) = 1中使用=

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

【讨论】:

我的查询中的 < 是一个错字...我刚刚运行您的解决方案,我得到了 880 个条目,当我运行 SELECT COUNT(DISTINCT sessions) 时,我得到 936...我很难是时候了解HAVING COUNT(*) < 2 - 也不匹配值 你有任何流到这个表吗? 我不确定什么是流媒体,但我只是看看意思,我不这么认为,数据源是我发送点击的后端,仅此而已,我m 使用此表创建报告。 换句话说 - 在运行查询时,是否有新条目从后端传到表中? 所以我认为这可以解释它 - 对吧?您可以测试/证明这一点 - 通过复制您的表格并针对这个新的静态表格尝试代码【参考方案2】:

@Mikhail 建议您使用HAVING COUNT(*) = 1 进行查询似乎没问题。 错误是您试图将此结果与SELECT COUNT(DISTINCT sessions) 匹配。 请注意,DISTINCT 用于显示不同的记录,包括来自重复的 1 条记录。另一方面,HAVING COUNT(*) = 1 只检查不重复的记录。

举个简单的例子,如果 session 有 : 1, 1, 2, 3 DISTINCT 将导致:1、2、3 HAVING COUNT(*) = 1 将导致:2、3 因此您在两个结果中看到的差异。

【讨论】:

嘿@Vijay 你能教我如何获得不同的结果吗?我真的需要它们我不希望它们被排除在我的数据之外...我尝试写 COUNT (DISTINCT customerToken) 而不是 HAVING COUNT(*) < 2 但它没有用

以上是关于Bigquery SELECT * WHEN COUNT(DISTINCT value) 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 bigquery 上合并 firebase 事件

CASE WHEN 及 SELECT CASE WHEN的用法

select case when,用来判断查询

CASE WHEN 及 SELECT CASE WHEN的用法

oracle菜鸟学习之 select case when的使用

ORACLE CASE WHEN 及 SELECT CASE WHEN的用法