SQL-Gruppe mit Auftrag von

8

Es fühlt sich an, als müsste es eine grundlegende Lösung haben, aber ich scheine es nicht zu bekommen.

Nehmen Sie diese Abfrage:

%Vor%

Ich möchte das effektiv tun:

%Vor%

Ich möchte DatePublished nicht wirklich auswählen, aber es scheint sinnvoll zu sein, danach zu sortieren. Das funktioniert aber nicht.

Grundsätzlich möchte ich Kategorien nach dem neuesten DatePublished-Artikel bestellen.

    
qui 10.11.2009, 15:14
quelle

2 Antworten

19
%Vor%

Da Sie GROUP BY ausführen, müssen Sie eine Aggregatfunktion über nicht gruppierende Spalten ausführen.

MAX wählt das Datum des letzten veröffentlichten Artikels aus jeder Kategorie und Reihenfolgekategorien entsprechend aus.

    
Quassnoi 10.11.2009, 15:15
quelle
6

In Aggregationen (- & gt; GROUP BY ) können Sie nur Felder in Kombination mit Aggregationsfunktionen (z. B. SUM , MAX , MIN ) und in GROUP BY aufgelisteten Feldern auswählen / verwenden. Klausel.

Einfaches Beispiel:

%Vor%

Wenn Sie SELECT A,B FROM table GROUP BY A schreiben würden, ergäbe dies:

%Vor%

aber das ist nicht möglich ( B hat 2 Werte in einer Zeile!?!). Sie müssen etwas mit den Werten von B tun, die sie auch gruppiert. Also zwei Möglichkeiten:

1 : Fügen Sie B in der GROUP BY -Klausel

hinzu %Vor%

ergibt

%Vor%

2 : Verwenden Sie eine Aggregationsfunktion für B

%Vor%

gibt dir

%Vor%

Die gleichen Argumente gelten für die ORDER BY -Klausel.

In den meisten Fällen, wenn Sie eine Aussage wie die erste, mit der ich auftauchte, schreiben möchten, ist die Möglichkeit 1 die Lösung, da Sie vielleicht wissen, dass A und B zusammengehören (allgemeines Beispiel: UserId und UserName ) aber das RDBMS kennt es nicht!

    
Johannes Weiß 10.11.2009 15:17
quelle

Tags und Links