Saya punya kueri yang saya coba jalankan dan tidak yakin bagaimana cara mengatasi bukan grup berdasarkan masalah. Saya perlu menghitung jumlah total pesanan untuk pelanggan, tetapi hanya menunjukkan pelanggan yang telah memesan pada bulan Maret.

SELECT customer#, firstname || ', ' || lastname "Customer Name", orderdate, 
COUNT(order#)
FROM orders JOIN customers
USING (customer#)
WHERE orderdate LIKE '%MAR%'
GROUP BY customer#;

Bantuan apa pun akan dihargai.

sql
0
Sarah 16 Januari 2018, 13:51

1 menjawab

Jawaban Terbaik

Solusi termudah di sini adalah dengan menambahkan nama pelanggan pertama dan terakhir ke klausa GROUP BY:

SELECT
    customer#,
    firstname || ', ' || lastname "Customer Name",
    COUNT(order#) AS cnt
FROM orders
JOIN customers
USING (customer#)
WHERE orderdate LIKE '%MAR%'
GROUP BY
    customer#,
    firstname || ', ' || lastname

Tampaknya Anda menggunakan gabungan alami, yang IMHO membuatnya sulit untuk melihat apa yang sebenarnya terjadi selama penggabungan itu sendiri. Anda mungkin ingin beralih menggunakan sintaks gabungan eksplisit di sini.

Perhatikan juga bahwa secara tegas kueri di atas tidak sesuai dengan ANSI karena berisi fungsi kolom dalam klausa GROUP BY. Ini mudah diperbaiki; kita bisa menggunakan subquery terlebih dahulu untuk menggabungkan nama depan dan belakang, dan kemudian menggabungkannya.

1
Tim Biegeleisen 16 Januari 2018, 10:55