In MySQL (die ich nehme an, Sie verwenden, da Sie SELECT *, COUNT(*) FROM T GROUP BY X
gebucht haben, die in allen RDBMS scheitern würde, die ich kenne). Sie können:
SELECT T.*
FROM T
INNER JOIN
( SELECT X, COUNT(*) AS Records
FROM T
GROUP BY X
ORDER BY Records DESC
LIMIT 1
) T2
ON T2.X = T.X
Das in MySQL getestet wurde und entfernt die implizite Gruppierung/Aggregation.
Wenn Sie Fensterfunktionen und einer der TOP/LIMIT mit Krawatten oder allgemeine Tabellenausdrücke verwenden können, wird es noch kürzer:
Windowed Funktion + CTE: (MS SQL-Server & PostgreSQL getestet)
WITH CTE AS
( SELECT *, COUNT(*) OVER(PARTITION BY X) AS Records
FROM T
)
SELECT *
FROM CTE
WHERE Records = (SELECT MAX(Records) FROM CTE)
Fensterfunktion mit TOP (MS SQL-Server getestet)
SELECT TOP 1 WITH TIES *
FROM ( SELECT *, COUNT(*) OVER(PARTITION BY X) [Records]
FROM T
)
ORDER BY Records DESC
Schließlich habe ich noch nie Orakel so apolgies für das Hinzufügen einer Lösung, die auf Orakel funktioniert ...
EDIT
Meine Lösung für MySQL nicht berücksichtigt Beziehungen nehmen, und mein Vorschlag für eine Lösung dieser Art von Schritten auf die Zehen, was Sie gesagt haben, Sie vermeiden wollen (duplicate Subqueries), so ist mir nicht sicher, ob ich nach allen helfen, aber nur für den Fall ist es hier vorzuziehen ist eine Version, die auf Ihrer Geige nach Bedarf funktioniert:
SELECT T.*
FROM T
INNER JOIN
( SELECT X
FROM T
GROUP BY X
HAVING COUNT(*) =
( SELECT COUNT(*) AS Records
FROM T
GROUP BY X
ORDER BY Records DESC
LIMIT 1
)
) T2
ON T2.X = T.X
Wenn Juho Antwort nicht gibt Ihnen, was Sie brauchen Bitte geben Sie ein, welche Art von Datenbank Sie sind Verwenden (Oracle, MySQL, SQL-Server, etc.) (mit den Tags, wo Sie in SQL einfügen. Wenn Sie nur allgemeine SQL-Lösungen möchten, erwähnen Sie dies im Hauptteil Ihrer Nachricht. Wenn Sie sich Zeit genommen haben, einige Beispieldaten und Tabellenstrukturen in Ihrem Post und auf sqlfiddle.com zu veröffentlichen, erleichtern Sie es den Benutzern, sich Ihre Frage genauer anzusehen. –
@LevinMagruder: MySQL 5.1; Beispieldaten unter http://sqlfiddle.com/#!3/b4306/4 – eggyal
Okay, ich benutze nicht mysql, aber jemand zeigt Ihnen eine einfachere Abfrage als die, die ich unten gezeigt habe, markieren Sie ihre Antwort als Antwort, aber wenn meine Antwort hilfreich ist und du mir eine Dankesrede schießen willst, danke. Wenn Sie so viele Probleme haben, lesen Sie vielleicht auch Fragen, die mit "Größte-pro-Gruppe" markiert sind. Es gibt viele interessante Ansätze. –