使用 BigQuery 旧版 SQL
# legacySQL
SELECT
user,
json,
JSON_EXTRACT_SCALAR(json, '$.tablet') AS tablet_minutes
FROM (
SELECT
user,
CONCAT('{', GROUP_CONCAT_UNQUOTED(CONCAT('"', device,'":', minutes)), '}') AS json,
FROM
(SELECT 'ben' user, 'phone' device, '1.9' minutes),
(SELECT 'ben' user, 'tablet' device, '2.3' minutes),
(SELECT 'anna' user, 'phone' device, '1.6' minutes),
GROUP BY
user)
使用标准 SQL(感谢 Mikhail)
# standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
SELECT 'ben' user, 'phone' device, 1.9 minutes UNION ALL
SELECT 'ben', 'tablet', 2.3 UNION ALL
SELECT 'anna', 'phone', 1.6
)
SELECT
user,
CONCAT('{', STRING_AGG(CONCAT('"',device, '":', CAST(minutes AS STRING))), '}') json,
ROUND(SUM(IF(device='tablet',minutes,0)),2) tablet_minutes
FROM `yourproject.yourdataset.yourtable`
GROUP BY user
两个输出
user json tablet_minutes
==== ==== ==============
ben {"phone":1.9,"tablet":2.3} 2.3
anna {"phone":1.6} 0.0