gpt4 book ai didi

mysql - 如何使用 CASE 语句而不将其放入 GROUP BY

转载 作者:行者123 更新时间:2023-11-29 11:51:16 24 4
gpt4 key购买 nike

我的查询有问题。这是我的代码:

select kpidate,reviewer as namareviewer, 
count(formcode) as actual,
round((0.2*count(formcode))) as target,
CASE WHEN blibliknowledge !=''
THEN count(blibliknowledge)
END as blibli,
CASE WHEN solusi !=''
THEN count(solusi)
END as solusi
from kpi
where kpidate >= '30/11/2015' AND kpidate<= '1/12/2015'
group by reviewer,kpidate,blibliknowledge,solusi

由于 CASE 表达式,我必须添加列 blibliknowledgesolusi,输出将如下所示:

enter image description here

我想按 namareviewer 分组,以便将“elbert.lukman”分组。所以输出只有两行。 bliblisolusi 列也将按 group by namareviewer 进行计算。

最佳答案

看起来您想要进行条件聚合。使用根据条件返回 1 或 0 的表达式,然后将其包装在 SUM 聚合中。或者,让表达式返回 NULL 和非空值,并将其包装在 COUNT 表达式中。

在 MySQL 中,日期文字应以 'yyyy-mm-dd' 格式提供。

举个例子:

SELECT k.kpidate
, k.reviewer AS namareviewer
, COUNT(k.formcode) AS actual
, ROUND((0.2*COUNT(k.formcode))) AS target
, SUM(CASE WHEN k.blibliknowledge != '' THEN 1 ELSE 0 END) AS blibli
, COUNT(CASE WHEN k.solusi != '' THEN 'foo' ELSE NULL END) AS solusi
FROM kpi k
WHERE k.kpidate >= '2015-11-30'
AND k.kpidate <= '2015-12-01'
GROUP
BY k.reviewer
, k.kpidate

在MySQL中,我们可以用 bool 表达式简写CASE表达式。如果表达式计算结果为 TRUE,MySQL 将返回整数值 1;如果表达式计算结果为 FALSE,则返回 0。如果表达式的计算结果为 NULL,则返回 NULL。

SELECT k.kpidate
, k.reviewer AS namareviewer
, COUNT(k.formcode) AS actual
, ROUND((0.2*COUNT(k.formcode))) AS target
, IFNULL(SUM(k.blibliknowledge != ''),0) AS blibli
, IFNULL(SUM(k.solusi != ''),0) AS solusi
FROM kpi k
WHERE k.kpidate >= '2015-11-30'
AND k.kpidate <= '2015-12-01'
GROUP
BY k.reviewer
, k.kpidate

关于mysql - 如何使用 CASE 语句而不将其放入 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34011436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com