Rumah > pangkalan data > tutorial mysql > Mengapa Oracle Saya GROUP BY Query Mengembalikan Ralat 'bukan GROUP BY expression'?

Mengapa Oracle Saya GROUP BY Query Mengembalikan Ralat 'bukan GROUP BY expression'?

Linda Hamilton
Lepaskan: 2025-01-05 17:59:43
asal
838 orang telah melayarinya

Why Does My Oracle GROUP BY Query Return a

GROUP BY Tanpa Fungsi Agregat

Apabila menggunakan GROUP BY tanpa fungsi agregat, adalah penting untuk memahami cara Oracle beroperasi untuk mengelakkan daripada menghadapi "bukan ungkapan KUMPULAN MENGIKUT" ralat.

KUMPULAN OLEH kumpulan baris dengan nilai yang sama untuk lajur yang ditentukan dan menghasilkan satu baris hasil. Walau bagaimanapun, lajur yang tidak muncul dalam fungsi agregat mesti disertakan dalam klausa GROUP BY untuk mengenal pasti gabungan unik nilai kumpulan.

Pertimbangkan jadual berikut:

EMP
+-------+------+------+
| EmpNo | EName | Sal  |
+-------+------+------+
| 7839   | King  | 5000  |
| 7698   | Blake | 2850  |
| 7782   | Clark | 2450  |
+-------+------+------+
Salin selepas log masuk

Contoh 1:

SELECT EName, Sal
FROM EMP
GROUP BY EName, Sal
Salin selepas log masuk

Hasil:

+------+------+
| EName | Sal  |
+------+------+
| King  | 5000  |
| Blake | 2850  |
| Clark | 2450  |
+------+------+
Salin selepas log masuk

Pertanyaan ini mengumpulkan baris dengan betul dan mengembalikan semua baris sejak lajur pengumpulan (EName dan Sal ) padanan.

Contoh 2:

SELECT EName, Sal
FROM EMP
GROUP BY EName
Salin selepas log masuk

Keputusan:

ORA-00979: not a GROUP BY expression
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pertanyaan ini gagal kerana Sal tidak termasuk dalam klausa GROUP BY. Oracle tidak tahu cara mengagregatkan berbilang baris dengan nilai Sal yang berbeza untuk EName yang sama.

Contoh 3:

SELECT EName, Sal
FROM EMP
GROUP BY Sal
Salin selepas log masuk

Hasil:

ORA-00979: not a GROUP BY expression
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pertanyaan ini juga gagal kerana EName tidak disertakan dalam KUMPULAN MENGIKUT klausa. Oracle perlu tahu EName mana yang hendak dikaitkan dengan setiap nilai Sal yang unik.

Contoh 4:

SELECT EmpNo, EName, Sal
FROM EMP
GROUP BY Sal, EName
Salin selepas log masuk

Hasil:

ORA-00979: not a GROUP BY expression
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pertanyaan ini gagal kerana bilangan lajur pilihan (EmpNo, EName, Sal) melebihi bilangan lajur dalam klausa GROUP BY (Sal, EName). Oracle memerlukan lajur yang dipilih untuk menjadi sebahagian daripada kumpulan, dengan mengambil kira gabungan unik.

Contoh 5:

SELECT EmpNo, EName, Sal
FROM EMP
GROUP BY EmpNo, EName, Sal
Salin selepas log masuk

Hasil:

+-------+------+------+
| EmpNo | EName | Sal  |
+-------+------+------+
| 7839   | King  | 5000  |
| 7698   | Blake | 2850  |
| 7782   | Clark | 2450  |
+-------+------+------+
Salin selepas log masuk

Pertanyaan ini berjaya kerana semua lajur yang dipilih disertakan dalam GROUP BY klausa. Oracle menganggap setiap gabungan unik EmpNo, EName dan Sal, menghasilkan tiga baris yang berbeza.

Atas ialah kandungan terperinci Mengapa Oracle Saya GROUP BY Query Mengembalikan Ralat 'bukan GROUP BY expression'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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