給定表:
Date Item Sales
-----------------------
2021-01-01 A 2000
2021-01-01 B 3000
2021-01-01 C 5000
2021-01-02 A 5000
2021-01-02 B 8000
2021-01-02 C 7000
問題是找出每個專案的銷售額占每日總銷售額的相應百分比。比如“A”項的銷售額占“2021-01-01”總銷售額的百分比。
我需要輸出如下表:
Date Item Sales Percent
-------------------------------------
2021-01-01 A 2000 20
2021-01-01 B 3000 30
2021-01-01 C 5000 50
2021-01-02 A 5000 25
2021-01-02 B 8000 40
2021-01-02 C 7000 35
請幫助我解決這個問題。我在查詢形成中有問題。請提供有關 MS - SQL 的建議。
uj5u.com熱心網友回復:
此查詢使用帶有 group by 的子查詢來獲取用于計算百分比列的每日總計。
create table sales ( date_sold Date, Item varchar(25), Sales int);
insert into sales values ('2021-01-01','A',2000), ('2021-01-01','B',3000), ('2021-01-01','A',5000), ('2021-01-02','B',8000), ('2021-01-02','C',7000);
select * from sales;
售出日期 | 專案 | 銷售量 :--------- | :--- | ----: 2021-01-01 | 一個 | 2000 2021-01-01 | 乙| 3000 2021-01-01 | 一個 | 5000 2021-01-02 | 乙| 8000 2021-01-02 | C | 7000
select s.date_sold, item, sales, (100*sales)/total "Percent" from sales s join (select date_sold, sum(sales) total from sales group by date_sold) ss on s.date_sold = ss.date_sold order by date_sold, item;
售出日期 | 專案 | 銷售 | 百分 :--------- | :--- | ----: | ------: 2021-01-01 | 一個 | 2000 | 20 2021-01-01 | 一個 | 5000 | 50 2021-01-01 | 乙| 3000 | 30 2021-01-02 | 乙| 8000 | 53 2021-01-02 | C | 7000 | 46
db<>在這里擺弄
uj5u.com熱心網友回復:
在子查詢中將表與自身連接起來,如下所示,并為分子使用強制轉換,如下所示
SELECT a.date,
item,
sales,
Cast(sales AS FLOAT) * 100 / salessum AS percentage
FROM sales a
JOIN (SELECT Sum(sales) salessum,
date
FROM sales a
GROUP BY date) b
ON a.date = b.date
或使用窗函式形式sum如下
SELECT
Date,Item,Sales,
100 * Sales / SUM(Sales) OVER (partition by date ) AS Percentage
FROM Sales a
uj5u.com熱心網友回復:
您可以使用sum視窗功能:
select
*,
100.0 * sum(Sales) over(partition by Date, Item) / sum(Sales) over(partition by date) as "Percent"
from
table_name;
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441782.html
上一篇:創建存盤程序以顯示姓氏
