我有下面的表格。
时间段的条件是0到6、7到12、13到18
是否有任何单个查询来获取此输出?
sellingMaterial sellingTime SAMSUNG 2 SAMSUNG 4 SAMSUNG 3 NOKIA 5 NOKIA 13 NOKIA 10 APPLE 12 APPLE 7 APPLE 15 Expected output is Time Period sellingMaterial 0 to 6 SAMSUNG
答案 0 :(得分:1)
以下是用于BigQuery标准SQL
#standardSQL
SELECT start, finish,
STRING_AGG(
CONCAT(sellingMaterial, ':', CAST(volume AS STRING))
ORDER BY volume DESC, sellingMaterial
) sellingMaterial
FROM (
SELECT start, finish, sellingMaterial, COUNT(1) volume
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
)
GROUP BY start, finish
您可以使用问题中的示例数据来进行测试,如上示例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'SAMSUNG' sellingMaterial, 2 sellingTime UNION ALL
SELECT 'SAMSUNG', 4 UNION ALL
SELECT 'SAMSUNG', 3 UNION ALL
SELECT 'NOKIA', 5 UNION ALL
SELECT 'NOKIA', 13 UNION ALL
SELECT 'NOKIA', 10 UNION ALL
SELECT 'APPLE', 12 UNION ALL
SELECT 'APPLE', 7 UNION ALL
SELECT 'APPLE', 15
), `project.dataset.conditions` AS (
SELECT 0 start, 6 finish UNION ALL
SELECT 7, 12 UNION ALL
SELECT 13, 18
)
SELECT start, finish,
STRING_AGG(
CONCAT(sellingMaterial, ':', CAST(volume AS STRING))
ORDER BY volume DESC, sellingMaterial
) sellingMaterial
FROM (
SELECT start, finish, sellingMaterial, COUNT(1) volume
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
)
GROUP BY start, finish
-- ORDER BY start
有结果
Row start finish sellingMaterial
1 0 6 SAMSUNG:3,NOKIA:1
2 7 12 APPLE:2,NOKIA:1
3 13 18 APPLE:1,NOKIA:1
我希望哪个时间记录最多[sellingMaterial]
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'SAMSUNG' sellingMaterial, 2 sellingTime UNION ALL
SELECT 'SAMSUNG', 4 UNION ALL
SELECT 'SAMSUNG', 3 UNION ALL
SELECT 'NOKIA', 5 UNION ALL
SELECT 'NOKIA', 13 UNION ALL
SELECT 'NOKIA', 10 UNION ALL
SELECT 'APPLE', 12 UNION ALL
SELECT 'APPLE', 7 UNION ALL
SELECT 'APPLE', 15
), `project.dataset.conditions` AS (
SELECT 0 start, 6 finish UNION ALL
SELECT 7, 12 UNION ALL
SELECT 13, 18
)
SELECT start, finish, sellingMaterial
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
ORDER BY COUNT(1) DESC
LIMIT 1
有结果
Row start finish sellingMaterial
1 0 6 SAMSUNG