【发布时间】:2017-07-19 16:54:06
【问题描述】:
类似这样的:SQL How to create a value for a new column based on the count of an existing column by groups?
但我有两个以上不同的价值观。我有一个可变的 n 个不同的值,所以我并不总是知道我有很多不同的计数。
然后在原始表中,我希望每行“3”、“4”等都有计数,即所有带有“3”的行都具有相同的计数,所有带有“4”的行将具有相同的计数等。
编辑:另外,对于每个不同的值,我将如何通过不同的日期(即“2017-07-19”)拆分计数?
edit2:我是这样做的,但现在我需要将其拆分为不同的日期。
edit3:这就是我按日期划分的方式。
#standardSQL
SELECT * FROM
(SELECT * FROM table1) main
LEFT JOIN (SELECT event_date, value, COUNT(value) AS count
FROM table1
GROUP BY event_date, value) sub ON main.value=sub.value
AND sub.event_date=SAFE_CAST(main.event_time AS DATE)
edit4:我希望 PARTITION BY 被记录在更好的地方。 BigQuery 或任何有详细文档的东西似乎都没有被广泛写入
#standardSQL
SELECT
*,
COUNT(*) OVER (PARTITION BY event_date, value) AS cnt
FROM table1;
【问题讨论】:
-
请给出一个玩具数据库(以“创建表...”和“插入...”的几行的形式)和期望的结果。
-
我设法通过 SELECT 和 JOIN 做到这一点,虽然我不确定它是否比你的建议更有效,但现在我正在寻找如何通过不同的日子计算不同的数字并通过不同的 ' 3' 和 '4' 通过不同的日期。
-
如果你有一些几乎可以工作的东西,请展示它。如果它完全做到了你想要的并且你担心效率,那么代码审查网站可能就是你想要的。 codereview.stackexchange.com
-
@Yunnosch 你知道拆分计数吗?只有相同值和相同日期的行的计数相同?
-
如果你能展示你的数据和预期输出的例子 - 你有更多的机会得到正确的答案!您可以阅读如何显示您遇到问题的代码和数据的Minimal, Complete, and Verifiable example,然后我们可以尝试帮助解决具体问题。你也可以阅读How to Ask。
标签: sql join count google-bigquery partition-by