带有子查询的 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语句汇总——聚合函数分组子查询及组合查询

如何使用单个 SQL 聚合函数查询为同一个聚合函数获取多个结果?

递归 SQL:使用递归子查询分解的聚合函数

SQL Server“不能对包含聚合或子查询的表达式执行聚合函数”,但 Sybase 可以

调优 SQL 查询:在同一张表上具有聚合函数的子查询

MS Access/SQL 子查询的语法,包括聚合函数