2016-12-14 8 views
0

MySQLテーブルの値を同じテーブルのフィールド数で選択する方法は?申告件数で値を選択する方法は?

例:

Table users has id, name, password, country 

私はこのように見えるように数える最高のユーザーとの唯一の上位3カ国のすべてのIDを選択する:

country, id 

私はこの
WHERE country IN (SELECT country FROM USERS GROUP BY country ORDER BY COUNT(id) DESC LIMIT 3)

をしようとすると

私は得るThis version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Serverバージョン:5.6.33-79.0 Percona Serverの

答えて

0

は上位3カ国を取得し、サブクエリで参加します。

SELECT u.country, u.id 
FROM users AS u 
JOIN (SELECT country 
     FROM users 
     GROUP BY country 
     ORDER BY COUNT(*) DESC 
     LIMIT 3) AS u1 
ON u.country = u1.country 

は、実際にWHERE column IN (SELECT ...)のいずれかの使用は、このようなJOINに変更することができ、そして多くの場合、パフォーマンスが優れています。

0

同じテーブル内のフィールドの数でMySQLのテーブル内の値を選択する方法は?

GROUP BY field HAVING COUNT(*)=123集計式は、WHERE句の後に使用してください。

+0

ここでどのように役立つ(フィールド)= 123が役に立ちますか?私は最初に数えてテーブルを注文する必要があります。 –

+0

あなたは2つの異なる質問をしました。私は最初のものに答えました。 –

0

これを試してみてください:

SELECT country, id 
FROM 
     (
     SELECT country,count(Id) as [NumberofUsers] 
     FROM USERS 
     GROUP BY country 
          ) X 
INNER JOIN USERS U ON X.Country=U.Country 
ORDER BY X.[NumberofUsers] DESC LIMIT 3 
+0

それは正しいようですが、カントリーテーブルにidフィールドがあると仮定しているので、 'COUNT(*)'が優先されます。 –

+0

この方法を試してみるとエラーになります。 –

+0

エラーは何ですか? –

関連する問題