Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengelakkan Penamaan Konflik dalam SQL GROUP BY dan ORDER BY Klausa?

Bagaimana untuk Mengelakkan Penamaan Konflik dalam SQL GROUP BY dan ORDER BY Klausa?

Patricia Arquette
Lepaskan: 2025-01-10 14:46:42
asal
183 orang telah melayarinya

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

Nama lajur dalam SQL GROUP BY dan ORDER BY klausa

Soalan:

Apabila mengumpulkan data dalam SQL, anda mesti menentukan nama lajur yang betul dalam fasal GROUP BY dan ORDER BY. Jika terdapat percanggahan penamaan antara lajur input dan output, keputusan mungkin tidak betul.

Penyelesaian:

GROUP BY Fasal

  • Elakkan menggunakan nama lajur sumber: Jangan gunakan nama lajur sumber (cth. attempt.result) secara langsung untuk pengumpulan. Pengumpulan hendaklah dilakukan menggunakan ungkapan CASE yang menentukan hasil yang diingini. Ini memastikan anda mengumpulkan mengikut nilai yang betul.

    <code class="language-sql">  GROUP BY model.name, attempt.type, CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END</code>
    Salin selepas log masuk
  • Gunakan alias lajur: Jika anda lebih suka menggunakan nama lajur asal, berikan alias lain dalam senarai SELECT. Ini menghalang lajur output daripada mengganggu kumpulan.

    <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>
    Salin selepas log masuk

ORDER BY Fasal

  • Gunakan rujukan kedudukan: Daripada memetik nama lajur output secara langsung, gunakan rujukan kedudukan (nombor ordinal) dalam klausa ORDER BY. Ini mengelakkan sebarang kemungkinan konflik penamaan.

    <code class="language-sql">  ORDER BY 1, 2, 3</code>
    Salin selepas log masuk

Contoh:

Tulis semula pertanyaan menggunakan sintaks JOIN yang betul, rujukan kedudukan dan menyelesaikan konflik penamaan:

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Penamaan Konflik dalam SQL GROUP BY dan ORDER BY Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan