在 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;
像这样:
但我有两个以上不同的价值观。我有可变的 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;