如何进行计数查询和连接两个表

时间:2017-12-17 12:05:45

标签: mysql database inner-join

我有两张表 alamat_penerima lokasi

  

alamat penerima表   [这是我的记录enter image description here

然后

  

lokasi table [这是记录enter image description here

我不会像这样制作两张桌子 [图]

enter image description here

我希望你能帮助我

我刚试过这个查询命令:

            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`

但结果是

result

1 个答案:

答案 0 :(得分: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值作为查询的第一行使用。{/ p>

SELECT w.wilayah, IFNULL(a.num,0) num

设计技巧是让你的第一个子查询确定结果集中的行数,然后使用LEFT JOIN将后续子查询中的信息放入结果中。