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 アイデアはありますか?

ティア、

まだ学習中のスティーブ

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 に答える