【问题标题】:Using IFNULL function mysql to set null to zero使用 IFNULL 函数 mysql 将 null 设置为零
【发布时间】:2015-05-04 10:30:39
【问题描述】:

我的数据库中有以下架构的表:

customers (customerID: integer, fName: string, lName: string)
items (itemID: integer, description: string, price: integer)
orders (orderID: integer, itemID: integer, aID: integer, customerID:integer, date: date)

以及以下代码:

SELECT c.customerID, COUNT(DISTINCT o.orderID) AS number_of_orders, 
       ROUND(SUM(i.price) / COUNT(DISTINCT o.orderID),2) AS average 
  FROM customers c 
     LEFT JOIN orders o 
            ON o.customerID = c.customerID 
           AND o.date >= '2013-03-01' 
           AND o.date < '2013-04-01' 
     LEFT JOIN items i 
            ON o.itemID = i.itemID 
GROUP BY c.customerID

它返回三个值:客户 ID、每位客户的订单数和每位客户的平均支出。 使用现在的代码,每位客户的平均支出返回为空白 (null)。 如果客户在 2013 年 3 月没有订购任何东西(即,如果 3 月每位客户的订单数量为零),我无法使用 IFNULL 函数将每位客户的平均支出设置为 0.00。 任何帮助将不胜感激!

【问题讨论】:

    标签: mysql database ifnull


    【解决方案1】:

    没有看到你的 IFNULL 尝试,这个逻辑对我有用:

    SELECT c.customerID, 
    COUNT(DISTINCT o.orderID) AS number_of_orders, 
    ROUND(IFNULL( (SUM(i.price) / COUNT(DISTINCT o.orderID)), 0.00),2) AS average,
    FORMAT(IFNULL(ROUND( (SUM(i.price) / COUNT(DISTINCT o.orderID)),2), 0), 2) AS averageWithFormat 
    FROM customers c 
    LEFT JOIN orders o ON o.customerID = c.customerID AND o.date >= '2013-03-01' AND o.date < '2013-04-01' 
    LEFT JOIN items i ON o.itemID = i.itemID 
    GROUP BY c.customerID
    

    返回:0.00

    我的语句中有两个 average 条目,因为在我的本地 MySQL Workbench 中,第一个以两位小数精度返回,但在 SQLFiddle 中没有。如果需要,我使用FORMAT 语法添加了第二个条目以强制两位小数精度。

    【讨论】:

      【解决方案2】:

      使用IF() 函数可能会更好。

      SELECT c.customerID, COUNT(DISTINCT o.orderID) AS number_of_orders, 
             IF(COUNT(o.orderID) > 0,ROUND(SUM(i.price) / COUNT(DISTINCT o.orderID),2),0) AS average 
        FROM customers c 
           LEFT JOIN orders o 
                  ON o.customerID = c.customerID 
                 AND o.date >= '2013-03-01' 
                 AND o.date < '2013-04-01' 
           LEFT JOIN items i 
                  ON o.itemID = i.itemID 
      GROUP BY c.customerID
      

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 1970-01-01
        • 2014-10-01
        • 1970-01-01
        • 2020-08-08
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多