如何使计数查询并加入两个表[关闭]

问题描述 投票:0回答:1

我有两个表address_response和位置

收件人地址表[这是我的记录

然后

lokasi表[这是记录

我想制作两张这样的表[查看]

我希望你能帮帮我

我刚试过这个查询命令:

            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

mysql 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将后续子查询中的信息放入结果中。

© www.soinside.com 2019 - 2024. All rights reserved.