带有子查询的 SQL 多个聚合函数
Posted
技术标签:
【中文标题】带有子查询的 SQL 多个聚合函数【英文标题】:SQL multiple aggregate functions with subqueries 【发布时间】:2020-09-01 23:30:00 【问题描述】:菜鸟问题,但我希望有人可以帮助我了解问题的逻辑。 所以我有 3 列的 SELECT 。我想计算 column1 中具有两个不同值的行,然后计算按 column2 分组的中位数。 然后我想为 column1 中的不同值设置相同的值。
我该怎么做?到目前为止我有这个,但我不知道将中值函数放在哪里?
SELECT region, product, year
(SELECT COUNT (*),
FROM mytable
WHERE product = dairy and product = meat) as count_dairy_meat
(SELECT COUNT (*)
FROM mytable
WHERE product = veg) as count_veg
FROM mytable
GROUP BY region, product, year;
我希望结果看起来像这样
count_dairy_meat count_veg Median
Region1
Region2
Region3
Total
【问题讨论】:
请以表格文本形式提供样本 daa 和所需结果。很难从您的解释和查询中评估您想要什么。 column1 怎么可能同时是 x 和 y?你是说OR吗? 对不起,我做了一个编辑,希望能帮助我想问的问题 也许您可以从 mytable 中包含一些示例行,然后假设这些行是 mytable 中的所有行,然后显示结果应该是什么。 【参考方案1】:我怀疑您正在寻找条件聚合。逻辑是为“meal”和“veg”生成单独的计数product
是:
select
region,
product,
year,
sum(case when product = 'meal' then 1 else 0 end) count_meat,
sum(case when product = 'veg' then 1 else O end) count_veg
from mytable
group by region, product, year
我不知道您要计算哪个中位数。 Oracle 有一个您可能会使用的 median()
聚合函数。
【讨论】:
谢谢!我确实想要那样的东西。我可以在总和中添加一个“和”语句,以便在第一笔总和中包含肉类和奶制品吗?我自己对中位数感到困惑。我被告知要获得每个地区的每组中位数(肉类和奶制品为一组,蔬菜为另一组)。 @Petra:你的意思是肉类或奶制品,所以:sum(case when product in ('meat', 'dairy') then 1 else 0 end) count_meat_or_dairy
以上是关于带有子查询的 SQL 多个聚合函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用单个 SQL 聚合函数查询为同一个聚合函数获取多个结果?