【发布时间】:2016-12-05 23:39:56
【问题描述】:
所以现在,我在 Rails 5.0 应用程序中有以下 postgres 查询 - 第一个查询基本上汇总了国内和国际电台 (radio_category) 以及 FM 和 AM (radio_type) 的收视率和组。第二个查询按 FM/AM 统计所有国内和国际电台和组的收视率。
为了提高效率,最好尝试编写一个原始选择语句以仅提取最终需要在物化视图中求和的数字,然后编写 SUM()/GROUP_BY 语句从视图中拉出?
或者是否有一些巧妙地使用 SUM() 我可以这样做,只让我 select * 原始数字一次?
假设我至少有 100 万行数据。
SELECT numbers.snapshot_id,
count(*) AS radio_count,
sum(numbers.view_count) AS view_count,
radios.category AS radio_category,
radios.type AS radio_type,
CASE
WHEN radios.type = 'AM' THEN 0
WHEN radios.type = 'FM' THEN 1
END as radio_enum_type
FROM (numbers
JOIN radios ON ((radios.id = numbers.radio_id)))
GROUP BY numbers.snapshot_id, radios.category, radios.type
UNION
SELECT numbers.snapshot_id,
count(*) AS radio_count,
sum(numbers.view_count) AS view_count,
3 AS radio_category,
radios.type AS radio_type,
CASE
WHEN radios.type = 'AM' THEN 0
WHEN radios.type = 'FM' THEN 1
END as radio_enum_type
FROM (numbers
JOIN radios ON ((radios.id = numbers.radio_id)))
GROUP BY numbers.snapshot_id, 3::integer, radios.type
【问题讨论】: