2011-11-08 18 views
3

私はmysql 5.0.51bを使用しています。 xyzという名前のテーブルが1つあります。 xyzテーブルには、abc、location、pqr、およびlmnの列があります。 情報が特定の場所に送信されるたびに、そのエントリはxyzテーブルで行われます。 最大の情報が送信される場所の名前が必要です。mysqlクエリでmaxとcount集計関数を併用したい

私が試した方法: まず、カウントとグループを使用して各位置に送信されたエントリの数を数えます。 問題は、最大値を持つ場所の名前を持つことです。

私は一時的な解を使用しました: 私はorder by節を使い、最大値を持つ最初のレコードを得るためにlimitを使います。 しかし、これには1つの問題があります 2つの場所が同じ数を持つ場合、上記のソリューションは1つの場所のみを与え、同じ数の他の場所は返されません。私は、任意のヒントを見越し

答えて

3

私の質問に答えてくれて、私の問題を解決する時間を割いてくれた皆さん、どうもありがとう。 http://lists.mysql.com/mysql/203074

内側のクエリはあなたの最大数を与え、外側のクエリは、それぞれが最大数にカウント比較に

SELECT count(*) AS cnt2, location 
FROM sms 
GROUP BY location 
HAVING cnt2 = (
SELECT count(*) AS cnt 
FROM sms 
GROUP BY location 
ORDER BY cnt DESC 
LIMIT 1); 

非常に重要なヒント:

しかし、私は解決策を持っています。

+0

ワンダフル!あなたが役に立つと思った回答に投票することを忘れないでください。これは、人々があなたの将来の要求に応え続けることを奨励する意味のある方法であなたの感謝を表します。質問に直接答える回答がない場合は、数日後に自分の回答を受け入れることができます。回答を受け入れることで、他の人が同様の質問を検索する際に役立ちます。スタックオーバーフローへようこそ! –

0

で おかげで、この興味深いソリューションを試してみてください非常に参考になります。この問題 を解決したい

- クエリの上

SELECT x.* FROM xyz x 
    JOIN (
    SELECT GROUP_CONCAT(location) locations FROM (
     SELECT location, COUNT(*) cnt FROM xyz GROUP BY location ORDER BY COUNT(*)) t 
    GROUP BY cnt DESC 
    LIMIT 1 
    ) t 
    ON FIND_IN_SET(x.location, t.locations); 
0
SELECT COUNT(*), `location` FROM `xyz` GROUP BY `location` 

がに数えるあなたの情報を提供します特定の場所。

これがあなたが探していたものでない場合は、サンプルデータと予想される出力を提供できますか?

2
Select MAX(cnt.Total) from 
(select count(Name)as Total from Gk_RegUser_answer_rel group by Reg_UserId) As cnt 
関連する問題