在 SQL 中,如何为另一列的每个不同值创建新的值列?

In SQL, how do I create new column of values for each distinct values of another column?

像这样:

但我有两个以上不同的价值观。我有可变的 n 个不同的值,所以我并不总是知道我有很多不同的计数。

然后在原来的 table 中,我希望每一行“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;

您提供的查询最好使用 window 函数编写:

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;