2016-12-14 5 views
0

Wie wählt man Werte in MySQL-Tabelle durch die Anzahl eines Feldes in der gleichen Tabelle?Wie wählt man die Werte nach der Anzahl eines Feldes?

Beispiel:

Table users has id, name, password, country 

Ich möchte alle IDs von nur Top 3 Länder auszuwählen, die mit höchster Benutzer wie folgt aussehen zählen:

country, id 

Als ich dieses versuchen
WHERE country IN (SELECT country FROM USERS GROUP BY country ORDER BY COUNT(id) DESC LIMIT 3)

Ich bekomme This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Server-Version: in dem selber Tisch 5.6.33-79.0 Percona Server

Antwort

0

mit einer Unterabfrage Mitglied werden, die die Top-3-Ländern erhält.

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 

Praktisch jede Verwendung von WHERE column IN (SELECT ...) kann auf eine JOIN wie dies geändert werden, und in vielen Fällen ist die Leistung ist besser.

0

Wie Werte in MySQL-Tabelle eines Feldes durch die Zählung wählen?

Verwenden Sie den GROUP BY field HAVING COUNT(*)=123 Aggregations Ausdruck nach der WHERE Klausel, wenn es.

+0

Wie hilft HAVING COUNT (Feld) = 123 hier? Ich muss den Tisch zuerst nach Anzahl sortieren. –

+0

Sie haben zwei verschiedene Fragen gestellt. Ich antwortete dem ersten von ihnen. –

0

Versuchen Sie folgendes:

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

Das sieht richtig aus, aber Sie gehen davon aus, dass die Landtabelle ein ID-Feld hat, daher wird "COUNT (*)" bevorzugt. –

+0

Ich bekomme den Fehler, wenn ich diesen Ansatz versuche. –

+0

Was ist der Fehler? –

Verwandte Themen