如何使用IF语句替换NULL值



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

到目前为止我的答案:

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是所有类别之后的Product_Name。你可能可以使用

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

代替使用IF((,COALESCE((函数返回第一个非空值,上面的操作将导致

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。。。。也许是采购总额,但不是总数量。。。我还添加了一个单独的总数量。你可以从你的最终答案中删除,但只是为了显示上下文。

最新更新