2011-02-08 12 views
0

mysqlデータベースのSQLクエリを構築するためのヘルプが必要です。 2テーブルは次のようになります。SQLクエリのヘルプ+カウント+ MAX

tblcities (id,name) 
tblmembers(id,name,city_id) 

ここで、「メンバー」の数が最大である「都市」の詳細を取得します。

よろしく

+0

メンバー数が最も多い都市(タイ)が複数存在する場合、クエリは何を返すべきですか? – Thomas

答えて

2
SELECT tblcities.id, tblcities.name, COUNT(tblmembers.id) AS member_count 
FROM tblcities 
LEFT JOIN tblmembers ON tblcities.id = tblmembers.city_id 
GROUP BY tblcities.id 
ORDER BY member_count DESC 
LIMIT 1 

基本的には:すべての都市を取得し、それぞれが持っているどのように多くのメンバー数える、並べ替え、そのメンバーによって最初に最高のカウントを作り、降順にカウント - そして、それだけで最初の都市を示しています。

+0

それについても考えましたが、おそらく**メンバーが最大の**都市が2つ以上あります... – rsenna

+1

@rsenna - OPは彼らが1つだけを望んでいることを意味します: ''city'の詳細は最大数'members''。 *都市とは対照的に*都市。 OPがそうでないと断言しない限り、関係を無視すべきであると仮定することは論理的です。 – Thomas

+1

@トーマス:私はどのように関係を無視するのですか?無作為に選んで?ネクタイして2番目の場所に行くすべての項目を無視しますか?申し訳ありませんが、唯一可能な論理的な仮定は、結び目*が実際に可能であり、すべての有効な回答が与えられるべきです! Q&Aサイトの目的は、よくある質問に答えさせることです。つまり、この質問*は他の人にも聞かれるかもしれません*。そして、私は彼らのほとんどが関係について興味を持っていると確信しています... – rsenna

0
Select ... 
From tblCities As C 
    Join (
      Select city_id, Count(*) As MemberCount 
      From tblMembers 
      Order By Count(*) Desc 
      Limit 1 
      ) As MostMembers 
     On MostMembers.city_id = C.id 
-1
select top 1 c.id, c.name, count(*) 
from tblcities c, tblmembers m 
where c.id = m.city_id 
group by c.id, c.name 
order by count(*) desc 
+0

MySQLはTOPコマンドをサポートしていません。 – Thomas

1

ひどいが、それはそれを行うための方法です:

SELECT * FROM tblcities WHERE id IN (
    SELECT city_id 
    FROM tblMembers 
    GROUP BY city_id 
    HAVING COUNT(*) = (
     SELECT MAX(TOTAL) 
     FROM (
      SELECT COUNT(*) AS TOTAL 
      FROM tblMembers 
      GROUP BY city_id 
     ) AS AUX 
    ) 
) 

そのようにネクタイがある場合は、まだあなたはメンバーの最大数を持つすべての都市を取得します。 ..

+1

痛いですが、ネクタイをうまく処理します。良いキャッチ。 –

+0

rsenna、あなたのものが働いた。しかし、私はこれとパフォーマンスの問題に直面し、マルクよりも時間がかかりました。そして、複数の最大結果に対してソリューションを提供してくれてありがとう。しかし、現在、私の必要を満たすことができます。 – Rana