基于子分组的最大值实现派生列

时间:2012-07-14 06:25:02

标签: mysql

所以我有这个MySQL 5.0.24表

select state, county, population from state_pops order by state, county;

产量

Arizona   Yapavai    4
Arizona   Pueblo     5
Arizona   Pinal      8
Arizona   Maricopa  13
Michigan  Lawson     3
Michigan  Maple      4
Michigan  Appleton   8
Texas     Richmond   5
Texas     Dupree     7
Texas     Brighton  10

我需要确定哪个州是每个州人口最多的县。

select state, county, max( population) from state_pops group by state order by state;

产量

Arizona   Maricopa  13
Michigan  Appleton   8
Texas     Brighton  10

易。但现在,我需要以某种方式标记每个州​​的人口最多的县 列出所有州的所有县,如此

Arizona   Yapavai    4  NO
Arizona   Pueblo     5  NO
Arizona   Pinal      8  NO
Arizona   Maricopa  13  YES
Michigan  Lawson     3  NO
Michigan  Maple      4  NO
Michigan  Appleton   8  YES
Texas     Richmond   5  NO
Texas     Dupree     7  NO
Texas     Brighton  10  YES

所以我需要以某种方式派生一个专栏,也许某种形式的CASE..WHEN任何想法?

TIA,

Still-learning Stev

2 个答案:

答案 0 :(得分:2)

您可以使用此解决方案:

SELECT a.state, 
       a.county, 
       a.population, 
       COALESCE(b.isMostPop, 'NO') AS flag
FROM state_pops a
LEFT JOIN
(
    SELECT state, MAX(population) AS maxpop, 'YES' AS isMostPop
    FROM state_pops
    GROUP BY state
) b ON a.state = b.state AND a.population = b.maxpop

查看SQL-Fiddle Demo

答案 1 :(得分:0)

使用此

select state, county, population,heaviest(state,conuty) from state_pops order by state, county;

并为该功能执行此操作:

    create function `heaviest`(`fstate` char(10),`fcounty` char(10))
 RETURNS char(3)

BEGIN

declare ans char(3);


if (select population from yourtable where state=fstate and county=fcounty)>=(select max(population) from yourtable group by state having state=fstate and count=fcount) then set ans='yes';

else set ans='no';

end if;


    return ans;

END;;