4

テーブルには id、streetname、count の 3 つの列があります。一部の ID には、複数の通り名が割り当てられています。Count は、それぞれの通りが ID に割り当てられる頻度を示します。カウントが最大の ID と通り名だけを取得するにはどうすればよいですか。

表の例:

id     streetname     count
1      street1        80
1      street2        60
1      street3        5
2      street4        10
2      street5        6

結果は次のようになります。

id     streetname
1      street1
2      street4

前もって感謝します!

4

3 に答える 3

7

使用しているデータベースを指定しませんでしたが、次のものを使用できるはずです。

select t1.id, t1.streetname, t1.count
from yourtable t1
inner join
(
  select id, max(count) max_count
  from yourtable
  group by id
) t2
  on t1.id = t2.id
  and t1.count = t2.max_count

SQL Fiddle with Demoを参照してください。countMySQL のバッククォートまたはデータベースが予約語をエスケープするために使用する任意の文字を使用して、列名をエスケープする必要があることに注意してください。私の提案は、列名とテーブル名に予約語を使用しないことです。

于 2013-08-27T15:19:41.343 に答える
1

これを試して

SELECT T1.id, T1.streetname FROM TableName T1
INNER JOIN 
(
SELECT id, MAX(count) maxcnt FROM TableName
GROUP BY id
) T2 
ON T1.id= T2.id AND T1.count = T2.maxcnt

SQL フィドルのデモ

于 2013-08-27T15:21:55.107 に答える
0

一意の列名「id」を持たないのは正しい方法だとは思いませんが、このクエリで問題を解決する必要がありました。

SELECT id, streetname FROM table ORDER BY count DESC
于 2013-08-27T15:19:20.937 に答える