Sql 一个选择与倍数计数(非常相似),可能吗?
我有个哥们儿 我有这样一个选择:Sql 一个选择与倍数计数(非常相似),可能吗?,sql,sql-server,mysqli,mysql-workbench,bdd,Sql,Sql Server,Mysqli,Mysql Workbench,Bdd,我有个哥们儿 我有这样一个选择: SELECT ES.id, ES.nombre nombreEstacion, COUNT(LE.id) Cuenta FROM estacion ES LEFT JOIN lectura LE ON ES.id = LE.idEstacion LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion WHERE ES.eliminada=0
SELECT
ES.id,
ES.nombre nombreEstacion,
COUNT(LE.id) Cuenta
FROM estacion ES
LEFT JOIN lectura LE ON ES.id = LE.idEstacion
LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE
ES.eliminada=0
AND LE.resultadoNOK=0
OR LE.idEstacion IS NULL
GROUP BY ES.id
SELECT
ES.id,
ES.nombre nombreEstacion,
COUNT(LE.id) Cuenta,
SUM(CASE WHEN LE.resultadoNOK = 0 THEN 1 ELSE 0 END) AS COUNT1,
SUM(CASE WHEN LE.resultadoNOK = 1 THEN 1 ELSE 0 END) AS COUNT2,
SUM(CASE WHEN LE.resultadoNOK = 3 THEN 1 ELSE 0 END) AS COUNT3
FROM estacion ES
LEFT JOIN lectura LE ON ES.id = LE.idEstacion
LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE
ES.eliminada=0
AND LE.resultadoNOK=0
OR LE.idEstacion IS NULL
GROUP BY ES.id
ID名称设置计数
我想用这件衣服做一个选择:
同一选择中的ID名称COUNT1 COUNT2 COUNT3
此计数具有相同的结构。它们只有一个区别
count1 is when (WHERE LE.resultadoNOK=0)
count2 is when (WHERE LE.resultadoNOK=1)
count3 is when (WHERE LE.resultadoNOK=3)
有人告诉我,解决方案是使用以下内容:
库恩塔伯爵,
求和(如果(X,X,X)计数2,
求和(如果(X,X,X)计数3
但是我不明白这个结构,也不明白我必须在“如果”中写什么值
我用“CASE”搜索另一个可能性,我也不明白
有人能告诉我这是怎么回事吗
谢谢大家!!:)当然可以用SUM和case表达式来实现这一点
SELECT
ES.id,
ES.nombre nombreEstacion,
SUM(case when LE.resultadoNOK = 0 then 1 end) as CuentaUno,
SUM(case when LE.resultadoNOK = 1 then 1 end) as CuentaDos,
SUM(case when LE.resultadoNOK = 2 then 1 end) as CuentaTres
FROM estacion ES
LEFT JOIN lectura LE ON ES.id = LE.idEstacion
LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE
ES.eliminada=0
AND LE.idEstacion IS NULL
GROUP BY ES.id
, ES.nombre
我会用一个CASE语句,如下所示:
SELECT
ES.id,
ES.nombre nombreEstacion,
COUNT(LE.id) Cuenta
FROM estacion ES
LEFT JOIN lectura LE ON ES.id = LE.idEstacion
LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE
ES.eliminada=0
AND LE.resultadoNOK=0
OR LE.idEstacion IS NULL
GROUP BY ES.id
SELECT
ES.id,
ES.nombre nombreEstacion,
COUNT(LE.id) Cuenta,
SUM(CASE WHEN LE.resultadoNOK = 0 THEN 1 ELSE 0 END) AS COUNT1,
SUM(CASE WHEN LE.resultadoNOK = 1 THEN 1 ELSE 0 END) AS COUNT2,
SUM(CASE WHEN LE.resultadoNOK = 3 THEN 1 ELSE 0 END) AS COUNT3
FROM estacion ES
LEFT JOIN lectura LE ON ES.id = LE.idEstacion
LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE
ES.eliminada=0
AND LE.resultadoNOK=0
OR LE.idEstacion IS NULL
GROUP BY ES.id
哦,谢谢!明天我尝尝!但这两种方法是一样的?我还有一个伙计。代码有什么区别:按ES.id分组(就像我做的那样)或者按ES.id分组,ES.nombre更改一些内容?因为除非nombre也在聚合中,否则您不能仅按eES.id分组。另外请注意,我删除了where谓词,该谓词将结果限制为仅显示resultadoNOK=0的行?如果您希望显示多个值,这是必需的。哦,谢谢!明天我将品尝它!但是这两种方法是一样的?你还有一个家伙。代码中的区别是什么:groupby ES.id(像我一样)还是groupby ES.id,ES.nombre改变了什么?我没有注意到在groupby中。你需要在groupby中包含ES.nombre,因为它没有聚合。不起作用:(((我测试你的解决方案,但是有很多寄存器是空的。我测试的解决方案是“当LE.resultadoNOK=0时,那么1结束)”但我认为这是错误的。如果你的**resultadoNOK可以为空,我会使用
SUM(当ISNULL(LE.resultadoNOK,-1)=0时,那么1结束)
如果您不希望空值计数。这会将空值转换为-1,因此不匹配。您使用的是什么:sql server还是mysql?