Mysql 查询以根据所有列值获取不同的值
我有一个带有状态列的表tasks,status的值可以是0、1或2 我需要实现以下逻辑:Mysql 查询以根据所有列值获取不同的值,mysql,Mysql,我有一个带有状态列的表tasks,status的值可以是0、1或2 我需要实现以下逻辑: 如果状态中的任何值为0,则答案为0 如果所有值均为2,则结果为2 否则,结果是一 现在我用3个查询来完成这项工作 a) SELECT status FROM tasks b) SELECT status FROM tasks WHERE status = 2; c) SELECT status FROM tasks WHERE status = 0 因此a)用于获取总行数。然后我将其与b)给出的行数进
- 如果状态中的任何值为0,则答案为0李>
- 如果所有值均为2,则结果为2李>
- 否则,结果是一
a) SELECT status FROM tasks
b) SELECT status FROM tasks WHERE status = 2;
c) SELECT status FROM tasks WHERE status = 0
因此a)用于获取总行数。然后我将其与b)给出的行数进行比较。如果匹配,那么答案是2。如果他们不这样做,我就查询c)。如果为非空,则答案为0,否则答案为1
有没有办法为此编写一个查询?或者有更好的方法吗?您可以使用条件聚合:
子查询执行应用业务逻辑所需的所有计数。外部查询仅使用此信息来生成所需的结果
从您的描述中不清楚案例中的第一个条件是否优先于第二个条件。如果没有,则只需在
s时切换两个的位置。使用以下命令
SELECT (case
when ((SELECT count(*) FROM tasks WHERE status = 0)>0) then 0
when ((SELECT count(*) FROM tasks WHERE status = 2)=(SELECT count(*) FROM tasks)) then 2
else 1 end) AS countOfStatus
尝试:
-因为当所有状态值为2时,最小值将为2,当任何值为0时,最小值将为0,否则最小值将为1。请检查答案。从技术上讲,第一个答案是正确的,我选择它作为正确答案,因为这是我的想法。我还得学习coutn和case。然而,你是绝对正确的。这本来是可行的。您好,Giorgos,+1,但您的查询仍然存在问题,您需要将最后第二行修改为->计数(状态为2时,则为2结束)为s2
@jQuery.PHP.Magento.com计数(状态为2时,则为**1结束)
的目的是对所有2进行计数。如果我将1
更改为2
,则COUNT
将返回COUNT*2
,并且sAll=s2
谓词将在外部查询中失败。@jQuery.PHP.Magento.com条件聚合工作,因为COUNT
忽略NULL
s。因此,COUNT(状态为2时,则为1结束)
精确计算具有status=2的行数。
SELECT (case
when ((SELECT count(*) FROM tasks WHERE status = 0)>0) then 0
when ((SELECT count(*) FROM tasks WHERE status = 2)=(SELECT count(*) FROM tasks)) then 2
else 1 end) AS countOfStatus
SELECT MIN(status) FROM tasks;