像这样: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;
答案 0 :(得分:2)
您提供的查询最好使用窗口函数编写:
SELECT t1.*, COUNT(*) OVER (PARTITION BY value) as cnt
FROM table1 t1;
我不确定这是否能回答你的问题。
如果您还想要计算另一列,则可以使用条件聚合:
SELECT t1.*,
COUNT(*) OVER (PARTITION BY value) as cnt,
SUM(CASE WHEN datecol = '2017-07-19' THEN 1 ELSE 0 END) OVER (PARTITION BY value) as cnt_20170719
FROM table1 t1;