mysql - SUM 的 SQL 聚合查询,但只允许正和(否则为 0)

标签 mysql sql aggregate-functions

我想查询订单表并显示客户 ID 和他所有订单的总数,但是订单总数可以是正数或负数。

select customer_id, SUM(order_total) from orders group by customer_id;

现在我的问题 - 如何在一个 sql 查询中实现以下内容:

如果总和为正,我想原样显示;如果总和为负数,我只想显示 0 而不是实际金额。

我正在寻找的是一个可以处理这个问题的函数,类似于 IFNULL 函数 (IFNULL(SUM(order_total),0)),但不是检查 null,它应该检查否定结果。

伪代码:

IFNEGATIVE(SUM(order_total),0)

有没有标准sql中的简单方法(或者专门在Mysql 5.5中,也可以)。

最佳答案

SELECT customer_id,
  CASE 
    WHEN SUM(order_total) < 0 THEN 0
    ELSE SUM(order_total)
  END
  FROM orders 
  GROUP BY customer_id;

检查您的执行计划,但 2 个 SUM 可能会在后台优化为单个 SUM

关于mysql - SUM 的 SQL 聚合查询,但只允许正和(否则为 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581796/

相关文章:

mysql - 为什么mybatis在执行查询时会提示SQL语法错误?

mysql - org.apache.commons.dbcp.DelegatingPreparedStatement.setNString(ILjava/lang/String;)V

mysql - 尝试从我的本地计算机连接到 EC2 mysql

.net - Oracle 不接受 2000 年之前的日期

mysql - 引用是否占用磁盘空间?

mysql - 使用 MySQL GROUP BY 表达式计数时如何包括零

mysql - SQL : Grouping by column while displaying other column entries

sql - 如何在 Postgres 的窗口函数中获取 mode()?

php - 在 MySQL 中插入数组值

mysql - 如何添加不同行的数据并将它们显示为sql查询中一行的列