以与基本查询分组相同的方式对子查询进行分组 SQL
Grouping my subquery the same way I group my base query SQL
我在使用子查询 return 获取正确值时遇到困难。从下面的查询和结果中可以看出,我正在尝试对 return 列使用子查询,该列对 margin_2020 列
使用不同的日期范围
SELECT os.ga_mapping as channel
, SUM(os.margin) as margin_2019
, (select sum(os.margin)
from orders_summary os
where os.date_order between '2020-10-01' and '2020-12-31'
group by 2) as margin_2020
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
GROUP BY 1;
查看第 3 列 'margin_2020' 每行 return 的值相同,而不是按频道过滤。正如它在 margin_2019 列中所做的那样。我如何将相同的分组逻辑应用于子查询,以便 margin_2020 按渠道细分?
感谢您的帮助或建议。
您只需要使用 ga_mapping
关联它,如下所示:
SELECT os.ga_mapping as channel
, SUM(os.margin) as margin_2019
, (select sum(oss.margin)
from orders_summary oss
where oss.date_order between '2020-10-01' and '2020-12-31'
and oss.ga_mapping = os.ga_mapping) as margin_2020 -- extra condition
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
GROUP BY 1;
您还可以通过使用条件聚合来避免子查询,如下所示:
SELECT os.ga_mapping as channel
, SUM(case when os.date_order BETWEEN '2019-07-01' AND '2019-09-31' then os.margin end) as margin_2019
, SUM(case when os.date_order BETWEEN '2020-10-01' and '2020-12-31' then os.margin end) as margin_2020
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
or os.date_order between '2020-10-01' and '2020-12-31'
GROUP BY 1;
我在使用子查询 return 获取正确值时遇到困难。从下面的查询和结果中可以看出,我正在尝试对 return 列使用子查询,该列对 margin_2020 列
使用不同的日期范围SELECT os.ga_mapping as channel
, SUM(os.margin) as margin_2019
, (select sum(os.margin)
from orders_summary os
where os.date_order between '2020-10-01' and '2020-12-31'
group by 2) as margin_2020
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
GROUP BY 1;
查看第 3 列 'margin_2020' 每行 return 的值相同,而不是按频道过滤。正如它在 margin_2019 列中所做的那样。我如何将相同的分组逻辑应用于子查询,以便 margin_2020 按渠道细分?
感谢您的帮助或建议。
您只需要使用 ga_mapping
关联它,如下所示:
SELECT os.ga_mapping as channel
, SUM(os.margin) as margin_2019
, (select sum(oss.margin)
from orders_summary oss
where oss.date_order between '2020-10-01' and '2020-12-31'
and oss.ga_mapping = os.ga_mapping) as margin_2020 -- extra condition
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
GROUP BY 1;
您还可以通过使用条件聚合来避免子查询,如下所示:
SELECT os.ga_mapping as channel
, SUM(case when os.date_order BETWEEN '2019-07-01' AND '2019-09-31' then os.margin end) as margin_2019
, SUM(case when os.date_order BETWEEN '2020-10-01' and '2020-12-31' then os.margin end) as margin_2020
, ((margin_2020 - margin_2019) / margin_2019) * 100 as rate_of_change
FROM orders_summary os
WHERE os.date_order BETWEEN '2019-07-01' AND '2019-09-31'
or os.date_order between '2020-10-01' and '2020-12-31'
GROUP BY 1;