Spaltennamen in SQL GROUP BY
und ORDER BY
-Klauseln
Frage:
Beim Gruppieren von Daten in SQL müssen Sie die richtigen Spaltennamen in den Klauseln GROUP BY
und ORDER BY
angeben. Wenn ein Namenskonflikt zwischen den Eingabe- und Ausgabespalten besteht, sind die Ergebnisse möglicherweise falsch.
Lösung:
GROUP BY
KlauselVermeiden Sie die Verwendung von Quellspaltennamen: Verwenden Sie Quellspaltennamen (z. B. attempt.result
) nicht direkt zum Gruppieren. Die Gruppierung sollte mithilfe eines CASE
-Ausdrucks erfolgen, der das gewünschte Ergebnis bestimmt. Dadurch wird sichergestellt, dass Sie nach den richtigen Werten gruppieren.
<code class="language-sql"> GROUP BY model.name, attempt.type, CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END</code>
Spaltenaliasnamen verwenden: Wenn Sie lieber die ursprünglichen Spaltennamen verwenden möchten, geben Sie in der Liste SELECT
einen anderen Aliasnamen an. Dadurch wird verhindert, dass die Ausgabespalten die Gruppierung beeinträchtigen.
<code class="language-sql"> SELECT ... , CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END AS result1 GROUP BY model.name, attempt.type, result1</code>
ORDER BY
KlauselVerwenden Sie Positionsverweise: Anstatt die Namen der Ausgabespalten direkt in Anführungszeichen zu setzen, verwenden Sie Positionsverweise (Ordnungszahlen) in der ORDER BY
-Klausel. Dadurch werden mögliche Namenskonflikte vermieden.
<code class="language-sql"> ORDER BY 1, 2, 3</code>
Beispiel:
Schreiben Sie die Abfrage unter Verwendung der korrekten JOIN
Syntax, der Positionsverweise und der Lösung von Namenskonflikten neu:
<code class="language-sql">SELECT m.name, a.type, CASE WHEN a.result = 0 THEN 0 ELSE 1 END AS result, CURRENT_DATE - 1 AS day, count(*) AS ct FROM attempt a JOIN prod_hw_id p USING (hard_id) JOIN model m USING (model_id) WHERE ts >= '2013-11-06 00:00:00' AND ts < '2013-11-07 00:00:00' GROUP BY 1, 2, 3 ORDER BY 1, 2, 3;</code>
Das obige ist der detaillierte Inhalt vonWie vermeide ich Namenskonflikte in den SQL-Klauseln GROUP BY und ORDER BY?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!