【问题标题】:How to use ROLLUP and ORDER BY to generate additional TOTAL row?如何使用 ROLLUP 和 ORDER BY 生成额外的 TOTAL 行?
【发布时间】:2017-07-24 10:18:43
【问题描述】:

我想在 Products 表中生成所有 product_name(s) 的列表,并使用 ROLLUP 添加一个带有“总”价格的附加卷。

“总”价格的计算方法是从折扣中减去 item_price,然后乘以购买的商品数量。 Products 表和 Order_Items 表都与两个表中都存在的 product_id 连接。

我的SQL查询如下:

SELECT product_name, (item_price - discount) * quantity AS "total"
FROM order_items
JOIN products ON products.product_id = order_items.product_id
GROUP BY ROLLUP (product_name, "total amount");

我遇到的问题是 SQL 开发人员告诉我,我的 SELECT 列表与 GROUP BY 不一致,并且“总金额”别名在 GROUP BY 子句中无效。

我的预期输出类似于

product_name        total price
product 1            $ 100.00
product 2            $ 300.00
product 3            $ 500.00
TOTAL                $ $900.00 <- generated using ROLLUP

我只需要有关 GROUP BY 的措辞和使用 ROLLUP 的帮助。

【问题讨论】:

  • 纯 SQL 脚本
  • 我使用 SQL Developer 运行我的脚本

标签: jquery sql oracle group-by rollup


【解决方案1】:

您想在第二个字段上使用 sum,修改 rollup 并在第一个字段上合并(或 NVL)以在汇总行上显示 TOTAL。

试试这个:

select coalesce(product_name, 'TOTAL') Product_name,
    sum((item_price - discount) * quantity) as "total"
from order_items
join products on products.product_id = order_items.product_id
group by ROLLUP(product_name);

【讨论】:

  • 它仍然显示“SELECT list 与 GROUP BY 不一致”错误
  • 根据 SQL 开发人员,“TOTAL”也是无效标识符
  • 哦,等一下——TOTAL 是用单引号“TOTAL”还是用双引号“TOTAL”很重要?
  • 我使用了“TOTAL”(单引号)而不是“TOTAL”。你可能已经修改了它
  • 哦,是的,我使用了双引号。它现在适用于单引号。谢谢!
猜你喜欢
  • 2018-11-27
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多