[英]SQL : SELECT SUM WHERE CONDITION
我在 SQL 请求方面遇到了一些麻烦:我有一个像这样的表数据图像的表
我想从此表创建一个视图以获取:
Time_A:一列的SUM(total_time_taken)WHERE柱(is_radiant)= 1
Time_B : SUM的同一列 (total_time_taken) WHERE列 (is_radiant)= 0
Time_AB:柱的SUM(total_time_taken)WHERE柱(is_radiant)= 0或(is_radiant)= 1
SELECT
SUM(`matchpickban_radiant`.`total_time_taken`) AS `draft_time_radiant`,
SUM(`matchpickban_dire`.`total_time_taken`) AS `draft_time_radiant`
FROM
(`matchpickban` AS `matchpickban_radiant`
JOIN `matchpickban` AS `matchpickban_dire` ON ((`matchpickban_dire`.`idmatchpickban` = `matchpickban_radiant`.`idmatchpickban`)))
WHERE
`matchpickban_radiant`.`is_radiant` = 1
AND `matchpickban_dire`.`is_radiant` = 0
实际上我可以在没有语法错误的情况下运行这个请求,但结果是 NULL 因为没有数据可以同时等于 0 和等于 1,显然......
另外,我不知道是否可以像我一样将表加入到自己的表中(matchpickban JOIN matchpickban)。
如果语法正确,我需要将 WHERE CONDITION 放在一边,但不知道如何,是否可以用 2 条IF语句(IF is_radiant=0 SUM(...))替换它
感谢阅读并帮助我解决这个问题! 如果您需要有关桌子或要求的更多信息,我将为您提供所需的一切!
不需要自连接或复杂的逻辑,您可以只使用条件聚合,即在聚合函数中使用条件表达式。
在 MySQL 中,你可以去:
select
sum(is_radiant * total_time_taken) time_a,
sum((1 - is_radiant) * total_time_taken) time_b,
sum(total_time_taken) time_ab
from matchpickban
where is_radiant in (0, 1)
这是有效的,因为is_radiant
仅由 0 /1
值组成 - 所以这简化了逻辑。 表达条件和的更规范的方式是:
sum(case when is_radiant = 1 then total_time_taken else 0 end) time_a,
sum(case when is_radiant = 0 then total_time_taken else 0 end) time_b,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.