phpmyadmin Mysql count如果该值小于或大于其他值

bvn4nwqk  于 2023-10-20  发布在  PHP
关注(0)|答案(3)|浏览(145)
SELECT wilayah,nilai,t_rkpd,tahun,periode
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'

当我查询这段代码时,结果是这样的table我尝试计数nilai是否小于或大于t_rkpd,使用以下代码:

SELECT COUNT(CASE WHEN nilai > t_rkpd THEN 1 END) AS tercapai 
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'

SELECT COUNT(CASE WHEN nilai < t_rkpd THEN 1 END) AS tidak_tercapai
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'

但当nilai大于t_rkpd时,两者的结果都是0,应该是34。为什么会这样

h7appiyu

h7appiyu1#

使用SUM而不是Count尝试相同的代码,并让我知道它是否有效。

SELECT ...,SUM(CASE WHEN nilai > t_rkpd THEN 1 ELSE 0 END) AS tercapai 
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'
GROUP BY ...

你需要按某个列进行分组,因为有一个聚合。如果有帮助的话一定要告诉我

xiozqbni

xiozqbni2#

NULL表示0。你只需要加上一个条件。

SELECT COUNT(CASE WHEN t_rkpd IS NULL OR nilai > t_rkpd  THEN 1 END) AS tercapai 
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'
ctrmrzij

ctrmrzij3#

NULL表示“未知值”。所以,如果你比较nilai和t_rkpd,其中一个值是NULL,那么答案是“unknown”。
你有COUNT(CASE WHEN nilai > t_rkpd THEN 1 END)。当表达式nilai > t_rkpd为true时,THEN部分被执行。表达式中没有ELSE,因此DBMS默认为ELSE NULL。这部分在nilai > t_rkpd不为true时执行,即false或unknown。
这意味着,当nilai或t_rkpd为null时,表达式结果为null,因此COUNT忽略此行。
在下面的查询中,我们考虑所有行和所有比较结果:

SELECT result, COUNT(*)
FROM
(
  SELECT
    CASE
      WHEN ni.nilai > p.t_rkpd THEN 'nilai > t_rkpd'
      WHEN ni.nilai < p.t_rkpd THEN 'nilai < t_rkpd'
      WHEN ni.nilai = p.t_rkpd THEN 'nilai = t_rkpd'
      ELSE 'unknown'
    END as result
  FROM nilai_indikator ni
  INNER JOIN provinsi p ON ni.wilayah = p.id
  WHERE ni.tahun = 2022
  AND ni.periode = 8 
  AND ni.id_indikator = 6
) compared
GROUP BY result
ORDER BY result;

相关问题