У меня есть две таблицы alamat_penerima и lokasi
alamat penerima table [это мой рекорд
а потом
таблица lokasi [это запись
я не буду делать две таблицы, такие как [view]
Я надеюсь, что вы можете помочь мне
Я просто попробовал эту команду запроса:
SELECT COUNT(alamat_penerima.'nama_penerima') AS penerima, lokasi.'wilayah'
FROM lokasi
INNER JOIN alamat_penerima ON alamat_penerima.'kota_kab' = lokasi.'wilayah'
GROUP BY alamat_penerima.'kota_kab'
но результат
Твой вопрос трудно понять, поэтому этот ответ - догадка. Мне кажется, что вы надеетесь перечислить количество адресов получателей в каждом регионе, но также показывать регионы без адресов.
Для этого вам нужны два подзапроса, соединенных вместе.
Этот подзапрос генерирует имена всех регионов.
SELECT DISTINCT wilayah FROM lokasi
Этот подзапрос генерирует список регионов с подсчетом адресов в каждом регионе. Однако набор результатов из этого подзапроса исключает регионы, в которых нет адресов.
SELECT COUNT(*) num, kota_kab AS wilayah
FROM alamat_penerima
GROUP BY kota_kab
Вы можете проверить эти подзапросы индивидуально, чтобы определить, являются ли они правильными. Это важно сделать.
Наконец, вы объединяете эти два вместе, как если бы они были таблицами. (Вот почему он называется структурированным языком запросов).
SELECT w.wilayah, a.num
FROM (
SELECT DISTINCT wilayah FROM lokasi
) w
LEFT JOIN (
SELECT COUNT(*) num, kota_kab AS wilayah
FROM alamat_penerima
GROUP BY kota_kab
) a ON w.wilaya = a.wilaya
Это даст то, что вы хотите, но показывая NULL
вместо 0
в строках без адресов. (Это результат использования LEFT JOIN
). Вы можете поместить здесь 0
значений, используя это вместо первой строки своего запроса.
SELECT w.wilayah, IFNULL(a.num,0) num
Трюк с дизайном заключается в том, чтобы сделать ваш первый подзапрос определением количества строк в вашем результирующем наборе, а затем использовать LEFT JOIN, чтобы помещать информацию из последующих подзапросов в ваши результаты.