繁体   English   中英

SQL : SELECT SUM WHERE 条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM