0

像这样的东西:SQL如何根据现有列按组的计数为新列创建值?

但我有两个以上不同的价值观。我有一个可变的 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)

编辑4:我希望 PARTITION BY 被记录在更好的地方。BigQuery 或任何有详细文档的东西似乎都没有被广泛写入

#standardSQL
SELECT
  *,
  COUNT(*) OVER (PARTITION BY event_date, value) AS cnt
FROM table1;
4

1 回答 1

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;
于 2017-07-19T18:51:28.483 回答