【问题标题】:How do I use an IF statement to replace NULL value?如何使用 IF 语句替换 NULL 值?
【发布时间】:2022-01-11 06:59:34
【问题描述】:

这是我的作业中的一个问题,我已经完成了大部分工作,只是无法让 IF 语句替换 NULL。 问题:写一个 SELECT 语句来回答这个问题:每个类别中每种产品的总购买量是多少?返回这些列 类别表中的 category_name 列 products 表中的 product_name 列 Order_Items 表中带有订单的每种产品的总采购量 使用 WITH ROLLUP 运算符包括为每个类别名称提供摘要的行以及提供总计的行。 如果 category_name 和 product_name 列中的空值用于汇总行,则使用 IF 和 GROUPING 函数将它们替换为文字值。

到目前为止我的回答:

SELECT product_name, SUM((item_price - discount_amount) * quantity) AS Total_quanity_purchased

FROM products p

JOIN order_items ori ON p.product_id = ori.product_id

GROUP BY product_name WITH ROLLUP

【问题讨论】:

  • 如果您有答案,请不要将其放在问题中:请编辑您的问题以删除您的答案,而是在下面的“您的答案”下添加正确的答案。
  • 哪一列返回NULL?您可能只需要使用SUM() 聚合对所有列执行IFNULL(colname,0)

标签: mysql


【解决方案1】:

我认为您所指的汇总 NULL 是所有类别之后的 Product_Name。您可能可以使用

IF( Product_Name is null, 'All Products', Product_Name )

COALESCE() 函数不使用 IF(),而是返回上述将导致的第一个非空值

COALESCE( Product_Name, 'All Products' )

现在,您的实际问题也包含类别,所以我也会怀疑类别,所以您也需要加入。因此,修改后的查询将是(包括所有列正确的 table/alias.columnName 上下文。现在习惯它以防止歧义知道哪个列与哪个表关联。尤其是当您在同一个查询中多次使用同一个表时. 使用别名。

SELECT 
      if( c.category_name is null, 'All Categories', c.category_name) Category,
      if( p.product_name is null, 'All Products', p.product_name ) Product, 
      SUM(ori.quantity) as Total_Qty_Purchased,
      SUM(( ori.item_price - ori.discount_amount) * ori.quantity) 
         AS Total_Purchase_Sales
   FROM 
      products p
         JOIN Category c
            on p.category_id = c.category_id
         JOIN order_items ori 
            on p.product_id = ori.product_id

   GROUP BY 
      c.category_name,
      p.product_name,
      WITH ROLLUP

最后,您对(价格 - 折扣)* 数量的计算将是总价格,而不是 Total_Quantity_Purchased....可能是 TotalPurchaseAmount,但不是总数量...我也添加了单独的数量总计。您可以从最终答案中删除,但只是为了显示上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2014-11-29
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多