как сделать подсчет запросов и объединить две таблицы

0

У меня есть две таблицы alamat_penerima и lokasi

alamat penerima table [это мой рекорд Изображение 174551

а потом

таблица lokasi [это запись Изображение 174551

я не буду делать две таблицы, такие как [view]

Изображение 174551

Я надеюсь, что вы можете помочь мне

Я просто попробовал эту команду запроса:

            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'

но результат

результат

Теги:
database
inner-join

1 ответ

1
Лучший ответ

Твой вопрос трудно понять, поэтому этот ответ - догадка. Мне кажется, что вы надеетесь перечислить количество адресов получателей в каждом регионе, но также показывать регионы без адресов.

Для этого вам нужны два подзапроса, соединенных вместе.

Этот подзапрос генерирует имена всех регионов.

                 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, чтобы помещать информацию из последующих подзапросов в ваши результаты.

  • 0
    Вау здорово !! Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню