首页 > 解决方案 > sql COALESCE 结果 (12300.4567) 到 12,300

问题描述

如何选择 COALESCE 结果格式化(,0)

我的查询是

SELECT (COALESCE((SELECT SUM(`invoices`.`paid_amount`) FROM `invoices`
          WHERE DATE(`invoices`.`date`)=CURDATE()),0) + 
         COALESCE((SELECT SUM(`other_incomes`.`other_income_amount`) FROM `other_incomes`
          WHERE DATE(`other_incomes`.`date`)=CURDATE()),0)) 
      AS total
FROM 
   ....

标签: mysql

解决方案


COALESCE 主要不会更改格式。它只返回传递给它的第一个非空值。

此外,与其尝试加入或执行两个不同的查询并添加,并分别处理所有总和和合并(更不用说四舍五入),我可能会将所有相关结果合并在一起,然后处理合并/总和/全部在最后。

尝试这个:

SELECT round(sum(coalesce(amt, 0)), 0) as total
FROM (
  SELECT paid_amount as amt
  FROM invoices i
  WHERE date(i.date) = CURDATE()
  
  union all
  
  SELECT other_income_amount
  FROM other_incomes o
  WHERE date(o.date) = CURDATE()
) z

在这里,我首先 COALESCE,将空值设为 0。我将其包装在一个 SUM 中以将值相加,最后是一个 ROUND 以获取格式。从问题中不清楚您是要 ROUND 还是 FLOOR。如果你想用那个逗号得到它,请使用 FORMAT。这是 mySQL 文档。您没有指定您的 SQL 风格。

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_format

此外,您应该包括您的 sql 平台和版本、表的创建语句,以及一些将提供示例数据的插入语句,以及您正在寻找的结果。它将帮助人们回答您的问题。如果您可以包含一个小提琴,例如https://dbfiddle.uk/,那就太好了。


推荐阅读