【发布时间】:2023-03-23 01:10:02
【问题描述】:
假设我有一张这样的桌子
userId eventType timing
647 'jump' 32.7
123 'skip' 13.1
647 'skip' 24.4
433 'jump' 12.7
433 'skip' 53.6
647 'jump' 2.4
647 'jump' 64.4
123 'skip' 14.0
433 'jump' 4.3
123 'jump' 18.6
我想输出一个表,其中每个 userId 有一行,列为 userId,该 userId 的 eventType 为“skip”的最短时间以及同一 userId 的 eventType 为“jump”的最短时间。像这样。
userID first_skip first_jump
647 24.4 2.4
123 13.1 18.6
433 53.6 4.3
我意识到我可以通过连接来做到这一点。
#standardSQL
WITH `project.dataset.table` AS (
SELECT 647 userId, 'jump' eventType, 32.7 timing UNION ALL
SELECT 123, 'skip', 13.1 UNION ALL
SELECT 647, 'skip', 24.4 UNION ALL
SELECT 433, 'jump', 12.7 UNION ALL
SELECT 433, 'skip', 53.6 UNION ALL
SELECT 647, 'jump', 2.4 UNION ALL
SELECT 647, 'jump', 64.4 UNION ALL
SELECT 123, 'skip', 14.0 UNION ALL
SELECT 433, 'jump', 4.3 UNION ALL
SELECT 123, 'jump', 18.6
)
SELECT
raw.userID,
MIN(skips.timing) AS first_skip,
MIN(jumps.timing) AS first_jump,
FROM `project.dataset.table` AS raw
LEFT JOIN `project.dataset.table` AS skips ON raw.userId = skips.userId
LEFT JOIN `project.dataset.table` AS jumps ON raw.userId = jumps.userId
WHERE skips.eventType = 'skip' AND jumps.eventType = 'jump'
GROUP BY userId
但是,我的实际数据非常大,并且还有一些 eventType 类别,这意味着查询需要永远处理。我想知道是否有一种更好、更有效的方法来做到这一点,它不使用连接。也许使用window 或partition?
【问题讨论】:
标签: sql google-bigquery pivot min