BIGQUERY - 如何按特定日期使用求和函数?
Posted
技术标签:
【中文标题】BIGQUERY - 如何按特定日期使用求和函数?【英文标题】:BIGQUERY - HOW TO USE SUM FUNCTION BY SPECIFIC DATE? 【发布时间】:2018-09-18 04:53:28 【问题描述】:所以基本上,我想按日期计算 EST_VIEWS 的总和,它在 "2018-09-07" and "2018-09-13"
之间累积。我该怎么做?
Row CMS_ID VIDEO_ID CHANNEL_ID TITLE EST_VIEWS DATE
1 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 1 2018-09-10
2 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 3 2018-09-07
3 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 1 2018-09-09
4 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 3 2018-09-11
5 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2 2018-09-13
6 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 1 2018-09-12
7 2 V133h8Rn8W0 UC-CcF1XGCRASDRrEOI_zEnQ Michael Jackson Nhí - Châu Phát Luân Ngôi Sao Nhí Trại Hè Trường Anh Ngữ RES 2018 1 2018-09-11
8 2 V133h8Rn8W0 UC-CcF1XGCRASDRrEOI_zEnQ Michael Jackson Nhí - Châu Phát Luân Ngôi Sao Nhí Trại Hè Trường Anh Ngữ RES 2018 1 2018-09-12
结果:
Row CMS_ID VIDEO_ID CHANNEL_ID TITLE DATE total
1 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-10 1
2 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-11 3
3 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-07 3
4 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-09 1
5 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-12 1
6 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-13 2
【问题讨论】:
【参考方案1】:由于您希望查看给定范围内的所有日期,即使您的源表可能没有这些日期的任何条目,我们也可以在这种情况下使用日历表。鉴于您想要的范围很小,以下应该就足够了:
WITH dates AS (
SELECT DATE("2018-09-07") AS DATE UNION ALL
SELECT DATE("2018-09-08") UNION ALL
SELECT DATE("2018-09-09") UNION ALL
SELECT DATE("2018-09-10") UNION ALL
SELECT DATE("2018-09-11") UNION ALL
SELECT DATE("2018-09-12") UNION ALL
SELECT DATE("2018-09-13")
)
SELECT
t1.DATE,
SUM(t2.EST_VIEWS) OVER (ORDER BY t1.DATE) AS total
FROM dates t1
LEFT JOIN yourTable t2
ON t1.DATE = t2.DATE
GROUP BY
t1.DATE;
请注意,如果您需要更大范围的日期,那么您可能需要一种更简洁、更自动化的方式来生成日历表。 See this SO question 一些选项。
【讨论】:
我试过你的方法。但是我还是没有得到预期的结果Row CMS_ID VIDEO_ID CHANNEL_ID TITLE DATE total 1 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-10 1 2 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-11 3 3 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-07 3 4 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-09 1 5 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-12 1 6 2 WKqQSws7CRM UC-CcF1XGCRASDRrEOI_zEnQ Con Két Quậy 2018-09-13 2
这里很难看,我把结果贴出来
您要报告所有日期,甚至是那些没有出现在您的表格中的日期吗?
是的,我想报告所有日期,我的意思是我想要一个表格,由每个 VIDEO_ID 计算 SUM
EST_VIEWS(在 '2018-09-07' 和 '2018-09 之间累积) -13')
@PhucTrinh 我更新了我的答案以使用日历表。【参考方案2】:
我想我明白了,你想知道一个 VIDEO_ID 在“2018-09-07”和“2018-09-13”之间有多少观看次数,如果我错了,请纠正我。因此,如果一个 VIDEO_ID 在 2018 年 9 月 7 日被看到一次,在 2018 年 9 月 8 日被看到两次,并且在本周的剩余时间里都没有看到,那么总和是 3。
您应该使用where 子句:
SELECT
VIDEO_ID,
SUM(EST_VIEWS)
WHERE
DATE(DATE)
BETWEEN
DATE('2018-09-07') AND DATE('2018-09-13')
GROUP BY
VIDEO_ID
【讨论】:
以上是关于BIGQUERY - 如何按特定日期使用求和函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 bigquery 中使用 rowid 按日期获取数据集的第一个值,并将给定日期的所有其他值设为 0