Kesalahan mengatakan semuanya, Anda tidak mengelompokkan menurut MEMBERS.MEMBER_ID
dan MEMBERS.MEMBER_NAME
.
SELECT MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME
, COUNT(personal_training_sessions.session_id)
FROM MEMBERS
JOIN personal_training_sessions
ON personal_training_sessions.member_id = members.member_id
GROUP BY MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME
Anda ingin jumlah sesi pribadi per anggota, jadi Anda perlu mengelompokkan berdasarkan informasi anggota.
Dasar (tentu saja bisa menjadi lebih kompleks) GROUP BY, SELECT query adalah:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Fungsi agregat, seperti yang dikatakan Ken White, seperti MIN()
, MAX()
, COUNT()
dll. Anda GROUP BY semua kolom yang tidak diagregasi.
Ini hanya akan berfungsi sebagaimana dimaksud jika MEMBERS
. Anda tabel unik pada MEMBER_ID
, tetapi berdasarkan permintaan Anda, saya curiga demikian. Untuk memperjelas apa yang saya maksud, jika tabel Anda tidak unik di MEMBER_ID
maka Anda tidak menghitung jumlah sesi per MEMBER_ID
tetapi jumlah sesi per MEMBER_ID
dan per MEMBER_NAME
. Jika mereka berada dalam hubungan 1:1 maka itu secara efektif adalah hal yang sama tetapi jika Anda dapat memiliki beberapa MEMBER_NAME
s per MEMBER_ID
maka tidak.