0

所以我有这个 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,

仍在学习的史蒂夫

4

2 回答 2

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 演示

于 2012-07-14T06:37:33.303 回答
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;; 
于 2012-07-14T06:42:09.857 回答