如何按年显示收入前 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 的产品及其在总收入中的份额?的主要内容,如果未能解决你的问题,请参考以下文章

sql每月选择前5名

搜索引擎营销带来上亿的收入和投资人,很多创业者不知道

MySQL_财务统计各产品品类各城市上周收入毛利表_20161202

sql 查询语句的练习

财务说的oi是指啥?

如何计算累积平均收入? Python