如何按年显示收入前 3 的产品及其在总收入中的份额?
Posted
技术标签:
【中文标题】如何按年显示收入前 3 的产品及其在总收入中的份额?【英文标题】:How to display the top 3 products by revenue and their share in total revenue by year? 【发布时间】:2020-10-21 00:03:40 【问题描述】:我有一个包含这些表的数据库。
-
用户(userId、年龄)
购买(purchaseId、userId、itemId、日期)
商品(itemId、价格)。
我需要按收入显示前 3 项(1 列),占总收入的份额(2 列)。
Example:
itemid share
1 20
2 10
3 8
收入 = 购买商品数量 * 价格。
我的代码
SELECT Items.itemid, SUM(Items.price) FROM Purchases
LEFT JOIN Items ON Items.itemid = Purchases.itemId
WHERE strftime('%Y', Purchases.date) = '2020'
GROUP BY Items.itemid
ORDER BY Items.itemid DESC LIMIT 3
我不明白如何在SQL中计算收入百分比以及如何显示。
【问题讨论】:
您使用的是哪个 dbms? (该查询是特定于产品的。) 【参考方案1】:你可以使用窗口函数:
SELECT i.itemid, SUM(i.price),
SUM(i.price) * 1.0 / SUM(SUM(i.price)) OVER () as ratio
FROM Purchases p JOIN
Items i
ON i.itemid = p.itemId
WHERE p.date >= '2020-01-01' AND
p.date < '2021-01-01'
GROUP BY i.itemid
ORDER BY i.itemid DESC
LIMIT 3;
注意查询的变化:
使用表别名,使查询更易写易读。 日期过滤使用日期常量,因此优化器可以使用索引/分区(如果可用)。 窗口函数提供您想要的总数。LEFT JOIN
是不必要的。您需要匹配项目才能获得总价。
【讨论】:
谢谢,但是比率显示为0,其他列显示正确imgur.com/YB3ekdD @RoseVinnur 。 . .您正在使用的数据库可能正在使用整数除法。只需乘以 1.0。以上是关于如何按年显示收入前 3 的产品及其在总收入中的份额?的主要内容,如果未能解决你的问题,请参考以下文章