如何在单个报告中组合计算最大值的两个查询
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 关键字报告在单个查询中返回与组合查询不同的数据