按类别(总价值和销售数量)报告2015年产品的销售情况。还要确定一个给定类别的销售额的百分之几代表该类别中每个产品的销售额。
我目前的问题是:
WITH sales AS
(SELECT t1.category_name
, t2.product_name
, (t3.unit_price*t3.quantity) Total_sales
, EXTRACT (YEAR FROM order_date) Year
FROM categories t1
INNER JOIN
products t2
ON t2.category_id=t1.category_id
INNER JOIN
order_details t3
ON t3.product_id=t2.product_id
INNER JOIN
orders t4
ON t4.order_id=t3.order_id
WHERE EXTRACT (YEAR FROM order_date) = '2015'
GROUP BY t1.category_name
, t2.product_name
, (t3.unit_price*t3.quantity)
, EXTRACT (YEAR FROM order_date)
ORDER BY 1
)
SELECT s.category_name
, s.product_name
, SUM (Total_sales)
FROM sales s
GROUP BY s.category_name
, s.product_name
ORDER BY 1
如何计算%?谢谢您
1条答案
按热度按时间olqngx591#
我认为您需要窗口函数—如果您没有指定的数据库支持这些函数:
窗口总和计算整个类别的总销售额,您可以用它除以当前产品的销售额。
请注意,我以几种方式更改了您的查询:
有意义的表别名使查询更易于编写、读取和维护
过滤日期而不进行转换比使用日期函数要有效得多
不需要子查询
将相关的主键放在
GROUP BY
子句(如果两个不同的产品或类别具有相同的名称)-另一方面,在该子句中还有additiona uneeded列