gpt4 book ai didi

mysql - 使用带有if表达式的sql计算多个值

转载 作者:可可西里 更新时间:2023-11-01 08:33:40 24 4
gpt4 key购买 nike

我有一个包含 6 列的预订表,分别称为 booked_start、booked_stop、used_start、used_stop、invoice_start、invoice_stop。这些值是 float 。我想获得值大于 0 的行的总和,但我也希望它计算 used_stop - used_start。

目前我正在处理这个:

SELECT
room,
IF( booked_stop_time > 0, sum(booked_stop_time - booked_start_time), 0 ) as booked,
IF( used_stop_time > 0, sum(used_stop_time - used_start_time), 0 ) as used,
IF( invoice_stop_time > 0, sum(invoice_stop_time - invoice_start_time), 0 ) as invoice
FROM bookings

问题是,如果 expr1 返回 false,它会重置总和。如果行值大于 0,我只想将行值添加到总和中。

我也尝试过使用保护套,但效果不佳。也许我应该改用 PHP 进行计算?

最佳答案

这应该有效:

SELECT
room,
SUM(
CASE WHEN booked_stop_time - booked_start_time > 0
THEN booked_stop_time - booked_start_time
END
) AS booked,
SUM(
CASE WHEN used_stop_time - used_start_time > 0
THEN used_stop_time - used_start_time
END
) AS used,
SUM(
CASE WHEN invoice_stop_time - invoice_start_time > 0
THEN invoice_stop_time - invoice_start_time
END
) AS invoice
FROM bookings

关注 booked 值:

  • 如果 booked_stop_time - booked_start_time 大于零,则 CASE 返回 booked_stop_time - booked_start_time,因此它包含在总和中。
  • CASE 没有任何其他条件,因此如果 booked_stop_time - booked_start_time 大于零,CASE 返回 NULL,这意味着该行不包括在总和中。

关于mysql - 使用带有if表达式的sql计算多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19225980/

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