sql - BigQuery - 查询每个并设置列中的元素
问题描述
我想循环查询几个元素。
这是查询:
SELECT
timestamp_trunc(timestamp, DAY) as Day,
count(1) as Number
FROM `table`
WHERE user_id="12345" AND timestamp >= '2021-07-05 00:00:00 UTC' AND timestamp <= '2021-07-08 23:59:59 UTC'
GROUP BY 1
ORDER BY Day
所以我在两个日期之间每天为用户“12345”一个行计数器,这是完美的。
但我想对我的表的每个 user_id 进行此查询,如果可能的话,我希望每一天都在列上,所以每一行都是一个用户,每列可用的数字(即一天)。
想要的结果:
User | 2021-07-05 | 2021-07-06 | 2021-07-07
---------------------------------------------
user_1 | 345 | 16 | 41
user_2 | 555 | 53 | 26
非常感谢你
解决方案
使用以下方法
SELECT * FROM (
SELECT
user_id,
DATE(timestamp) as Day,
COUNT(1) as Number
FROM `project.dataset.table`
WHERE timestamp >= '2021-07-05 00:00:00 UTC' AND timestamp <= '2021-07-08 23:59:59 UTC'
GROUP BY 1, 2
)
PIVOT (SUM(Number) FOR Day IN ('2021-07-05','2021-07-06','2021-07-07'))
甚至更简单(没有原始查询中的 GROUP BY)
SELECT * FROM (
SELECT
user_id,
DATE(timestamp) as Day,
FROM `project.dataset.table`
WHERE timestamp >= '2021-07-05 00:00:00 UTC' AND timestamp <= '2021-07-08 23:59:59 UTC'
)
PIVOT (COUNT(*) FOR Day IN ('2021-07-05','2021-07-06','2021-07-07'))
推荐阅读
- reactjs - 如何用 jest 获得模拟效用函数
- reactjs - 'this' 关键字在映射语句(React)中未定义
- mongodb - MongoDB 文档顺序改组
- erwin - 将 DDL 导入到 CA Erwin Data Modeller r9.64 并带有注释
- java - 任何更改的字段级验证
- python - 如何用 Python 计算血管的宽度/直径
- kubernetes - Kubernetes 集群中具有 TLS 的 Hyperledger 对等点不断抛出 TLS 握手错误
- php - php setcookie() 不能在实时服务器上工作,但可以在本地主机上工作
- python - 我通过更改目录中的每个文件而收到此错误
- react-native-ios - 将项目从 android 移动到 iOS 时出现 npm 错误?