如何显示所有结果查询,即使结果为空

时间:2019-06-03 07:38:30

标签: mysql sql

我从数据库计算了我的数据,但是结果有问题。结果仅显示不为空的数据,而不显示为空的数据。如何显示为空且不为空的数据行?

我这样的查询结果

pendidikan| Male | Famale | Total
----------+------+--------+------
    SD    |  3   |   4    |  7
   SMP    |  2   |   1    |  3
   SMA    |  1   |   3    |  4
    S1    |  10  |   1    |  11

但是我想要这样的结果:

pendidikan| Male | Famale | Total
----------+------+--------+------
    SD    |  3   |   4    |  7
   SMP    |  2   |   1    |  3
   SMA    |  1   |   3    |  4
    S1    |  10  |   1    |  11
    S2    |  0   |   0    |  0
    S3    |  0   |   0    |  0

我想显示数据库中的空数据。这是我的查询

SELECT a.NamaStatusPendidikan, COUNT(c.IDPencaker) as total,
count(case when c.JenisKelamin='0' then 1 end) as laki,
count(case when c.JenisKelamin='1' then 1 end) as cewe 
FROM msstatuspendidikan as a JOIN mspencaker as c ON
a.IDStatusPendidikan = c.IDStatusPendidikan JOIN 
mspengalaman as d ON c.IDPencaker = d.IDPencaker 
WHERE d.StatusPekerjaan = '0' AND c.RegisterDate 
BETWEEN '2019-01-01' AND '2019-03-01' GROUP BY a.IDStatusPendidikan

1 个答案:

答案 0 :(得分:1)

尝试运行此查询:

SELECT sp.NamaStatusPendidikan, 
       COUNT(*) as total,
       SUM( p.JenisKelamin = 0 ) as laki,
       SUM( p.JenisKelamin = 1 ) as cewe 
FROM msstatuspendidikan sp LEFT JOIN
     mspencaker p
     ON sp.IDStatusPendidikan = p.IDStatusPendidikan AND
        p.RegisterDate BETWEEN '2019-01-01' AND '2019-03-01' LEFT JOIN 
     mspengalaman g
     ON g.IDPencaker = c.IDPencaker AND
        g.StatusPekerjaan = 0
GROUP BY sp.IDStatusPendidikan;

注意:

  • JOIN已替换为LEFT JOIN
  • 除第一个表外的所有表的过滤条件已移至ON子句。
  • 这用表缩写替换了无意义的表别名,因此表更易于阅读。
  • 看起来像数字的东西可能是数字,所以我删除了单引号。
  • 使用MySQL在数字上下文中将布尔值视为数字的事实,这简化了计数。