如何在单个报告中组合计算最大值的两个查询

Posted

技术标签:

【中文标题】如何在单个报告中组合计算最大值的两个查询【英文标题】:How to combine two queries calculating maximum in a single report 【发布时间】:2015-11-17 11:00:06 【问题描述】:

我有一张表 (table1),其中包含:

子县名, County_name,malepop(每个子县),femalepop(每个子县)

我想制作一份报告,为我提供所在县男性和女性人口最多的子县。

我尝试过的:

我创建了两个查询,一个用于计算男性流行度最高的子县,一个用于计算女性流行度最高的子县。但是,我不确定如何将两者组合成一个报告。我能得到关于如何做到这一点的提示吗?

我使用的查询是:

SELECT Sub_county_name,county_name,male_pop
FROM table1
WHERE male_pop = (SELECT MAX(male_pop) FROM table1 a
                  WHERE a.county_name = table1.county_name);


SELECT Sub_county_name,county_name,female_pop
FROM table1
WHERE female_pop = (SELECT MAX(female_pop) FROM table1 a
                    WHERE a.county_name = table1.county_name);

【问题讨论】:

或将两个 WHERE 子句放在一起? 【参考方案1】:

如果您需要组合查询,可以使用以下查询:

SELECT        Sub_county_name, county_name, male_pop, female_pop
FROM            table1
WHERE        (male_pop =
                             (SELECT        MAX(male_pop) AS Expr1
                               FROM            table1 AS a
                               WHERE        (county_name = table1.county_name))) AND (female_pop =
                             (SELECT        MAX(female_pop) AS Expr1
                               FROM            table1 AS a
                               WHERE        (county_name = table1.county_name)))

【讨论】:

我猜 OP 想要 OR 而不是 AND。【参考方案2】:

我建议将子查询放入FROM 子句中:

SELECT table1.*
FROM table1 JOIN
     (SELECT county_name, MAX(male_pop) as maxmp, MAX(female_pop) as maxfp
      FROM table1
      GROUP BY county_name
     ) m
     ON table1.county_name = m.county_name and
        (table1.male_pop = m.maxmp OR table1.female_pop = m.maxfp);

【讨论】:

以上是关于如何在单个报告中组合计算最大值的两个查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句汇总(三)——聚合函数分组子查询及组合查询 - Darly

Adwords 关键字报告在单个查询中返回与组合查询不同的数据

详细教程一文参透MongoDB聚合查询

PostgreSQL - 如何在单个查询中获取列的最小值和最大值以及与它们关联的行?

单个查询中 id 子集的函数的最大值?

如何在同一个表上组合两个查询以在 MySQL 中获得单个结果集