2012-06-15 2 views
5

Es gibt andere Fragen hier, die ähnlich klingen, aber nicht sind. Ich habe eine Abfrage, die eine Reihe von Zeilen mit der Gruppe zurückgibt, und ich möchte ein Limit für die gesamte Gruppe nach Zeilen anwenden, nicht die gesamten Zeilen, die zum Erstellen der Gruppen verwendet werden.Wie begrenzen Sie die Gruppe nach Zeilen in einer MySQL-Abfrage?

ID TYPE  COLOR  SIZE 
---------------------------------------- 
1  Circle  Blue   Large 
2  Circle  Red   Large 
3  Square  Green  Large 
4  Circle  Purple  Large 
5  Circle  Blue   Small 
6  Circle  Yellow  Medium 
7  Circle  Black  Large 
8  Oval  Blue   Large 
9  Circle  Gray   Small 
10 Triangle Black  Large 
11 Star  Green  Large 
12 Triangle Purple  Large 

SELECT size, type FROM clothes WHERE size = 'large' GROUP BY type LIMIT 0, 5 

TYPE  SIZE  ROWS 
---------------------------  
Circle  Large  4 
Square  Large  1 

^^^^ 2 GROUP BY ROWS, die bereits meine Grenze

TYPE  SIZE  ROWS 
---------------------------  
Circle  Large  4 
Square  Large  1 
Oval  Large  1 
Triangle Large  2 
Star  Large  1 

erschöpft ^^^^ Hier ist, was ich will, Grenze für die Gruppen angewandt

Es muss eine sein Unterabfrage oder etwas, was ich hier tun kann, aber ich finde es nicht heraus.

Danke.

+2

Es ist nicht klar, was Sie zu tun versuchen. Können Sie einige Beispieldaten aus Ihrer Tabelle anzeigen und genau zeigen, welches Ergebnis Sie möchten. Vielleicht können Sie das Limit auch von 25 auf 5 reduzieren, um das Beispiel zu vereinfachen. –

+0

Ich kann meine echte Abfrage und mein Dataset nicht wirklich posten, da es viel zu groß ist. Wenn dies sauber beantwortet wird, sollte es zutreffen. – Tomas

Antwort

4

Dies funktioniert für mich:

SELECT type, size, COUNT(*) AS rows 
FROM clothes 
WHERE size = 'large' 
GROUP BY type 
LIMIT 0, 5 

Ergebnisse in:

type  size rows 
------------------------ 
Circle Large  4 
Oval  Large  1 
Square Large  1 
Star  Large  1 
Triangle Large  2 

LIMIT sollte nach GROUP BY angewendet werden, so verstehe ich das Problem nicht.

+0

Ja, das funktioniert tatsächlich. Mein Problem in meiner echten Abfrage ist, dass ich nach mehr als einer Sache gruppiert habe, was bedeutete, dass es in separate Zeilen aufgeteilt wurde. – Tomas

3
SELECT * FROM (
    SELECT id, color, size, type FROM clothes WHERE size = 'large' GROUP BY type 
) AS baseview LIMIT 0, 25 
0

Wie wäre es, nur zu zählen, wie viele es gibt?

select color, size, type, count(id) from clothes where size = 'large' group by size, type, color; 

Ich bin neu programmieren, um SQL, aber dies sollte die folgenden zurückgeben, dass die Art und Weisen Sie 1 Zeile für jede Farbe/Größe/Art Kombination verwenden und eine Menge Zahl, nachdem es bekommen.

Red großes Hemd 4

Grün großes Hemd 6

Grüne große Hosen 2

und so weiter ...

Verwandte Themen