Heim > Datenbank > MySQL-Tutorial > Wie vermeide ich Namenskonflikte in den SQL-Klauseln GROUP BY und ORDER BY?

Wie vermeide ich Namenskonflikte in den SQL-Klauseln GROUP BY und ORDER BY?

Patricia Arquette
Freigeben: 2025-01-10 14:46:42
Original
184 Leute haben es durchsucht

How to Avoid Naming Conflicts in SQL's GROUP BY and ORDER BY Clauses?

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 BYKlausel

  • Vermeiden 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>
    Nach dem Login kopieren
  • 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>
    Nach dem Login kopieren

ORDER BYKlausel

  • Verwenden 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>
    Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage