[英]SQL Query Sum, Multiply and combine 5 tables then group
我已經創建了我的表。 我正在嘗試創建一個查詢,該查詢從已售表中乘以並添加已售出數量和來自 on_sale 表中的銷售價格,並暫時將其稱為 R1,將產品表中的零售價格和已售表中的已售數量稱為 R2。
在我的查詢中,我想計算我的收入。 問題是有兩個不同的日期但一個銷售數量。 這意味着我很難區分兩種類型的銷售(打折銷售、零售銷售)。
例如,2月1日,我有一個促銷活動,我賣出了10件,售價為sale_price,日期保存為sale_date,參考On_sale表。 2 月 2 日,我賣出了 8 個數量,但已售出的價格保存為零售價格並保存為已售出日期。
CREATE TABLE Sold (
store_number int(16) NOT NULL AUTO_INCREMENT,
pid int(16) NOT NULL,
sold_date date NOT NULL,
sold_quantity int(16) NOT NULL,
PRIMARY KEY (pid,store_number,sold_date)
);
CREATE TABLE Store (
store_number int(16) NOT NULL AUTO_INCREMENT,
phone_number varchar(16) NOT NULL DEFAULT '0',
street_address varchar(250) NOT NULL,
city_name varchar(250) NOT NULL,
state varchar(250) NOT NULL,
PRIMARY KEY (store_number)
);
CREATE TABLE On_sale (
pid int(16) NOT NULL,
sale_date date NOT NULL,
sale_price float(16) NOT NULL,
PRIMARY KEY (pid,sale_date)
);
CREATE TABLE Product (
pid int(16) NOT NULL,
product_name varchar(250) NOT NULL,
retail_price float(16) NOT NULL,
manufacture_name varchar(250) NOT NULL,
PRIMARY KEY (pid)
);
CREATE TABLE City (
city_name varchar(250) NOT NULL,
state varchar(250) NOT NULL,
population int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (city_name,state)
);
這就是我想要的樣本數據
STORE TABLES
store_number phone_number street_address city_name state
1 # ### New York NY
2 # ### HOUSTON TX
3 # ### L.A CA
Sold Tables
store_number PID SOLD DATE SOLD_QUANTITY
1 1 2/2/2017 3
2 2 2/3/2018 3
3 3 2/5/2019 4
On_sale Tables
PID SALE_DATE SALE PRICE
1 2/4/2018 2
Product Tables
PID PRODUCT NAME RETAIL_PRICE manufacture_name
1 XX 5 XXX
2 XX 4 XXX
3 XX 3 XXX
CITY TABLE
CITY_NAME STATE POPULATION
New York NY 100
HOUSTON TX 200
L.A CA 201
RESULT
YEAR REVENUE POPULATION
2017 15 (NEW YORK)SMALL
2018 14 (HOUSTON)MEDIUM
2019 12 (L.A) LARGE
我的數據說明
: 這很混亂。 首先我需要根據銷售日期和銷售日期顯示年份,然后計算收入。 例如,在 2018 年,revneue 是 (2 from_sale table's sale_price) + (12 (3 * 4, 3 is the sell_quantity from sell_table, and 4 is retail_price) = 14。
城市規模由范圍分隔,其中 0>#<100 是小 100>=x<200 是中等,任何高於 200 的都是大。 括號中的城市名稱只是為了幫助跟蹤。 城市基於商店表中的城市名稱和州,這是通過比較已售表和商店表上的 store_number 來完成的
這需要我在查詢后加入 city 表以獲取 R1(正常價格)和 R2(銷售價格)。 這是我得到的。 我很失落
SELECT Sold.sold_quantity,
Product.retail_price AS S1
SUM(Product.retail_price*Sold.sold_quantity) AS R1
FROM Sold LEFT JOIN Product
ON Sold.pid=Product.pid
SELECT Sold.sold_quantity,
On_sale.sale_price AS S2
SUM(On_sale.sale_price) AS R2
FROM Sold LEFT JOIN On_sale
ON Sold.pid=On_sale.pid
你可以試試下面——
SELECT year(sold_date) as yr,population
,SUM(Product.retail_price*Sold.sold_quantity) -SUM(On_sale.sale_price * Sold.sold_quantity) AS revenue
FROM Sold
LEFT JOIN Product ON Sold.pid=Product.pid
LEFT JOIN On_sale ON Sold.pid=On_sale.pid
left join city on city.city_name=product.manufacture_name
group by year(sold_date),population
我不明白在您的查詢中使用LEFT JOIN
。 您似乎有一個明確定義的數據模型,並且 id 應該對齊。
您特別說要添加R1
和R2
,因此您描述的查詢如下所示:
SELECT year(s.sold_date) as yr, c.population,
(SUM(p.retail_price * s.sold_quantity) +
SUM(os.sale_price * s.sold_quantity)
) AS revenue
FROM Sold s JOIN
Product p
ON s.pid = p.pid JOIN
city c
ON c.city_name = p.manufacture_name LEFT JOIN
On_sale os
ON s.pid = os.pid AND
os.sale_date = s.sold_date
GROUP BY year(s.sold_date), c.population
ORDER BY year(s.sold_date), c.population;
請注意,這會添加一個額外的條件,說明日期與on_sale
表匹配。 這對我來說很有意義。
將這兩個收入數字相加對我來說似乎很可疑。 我希望您需要銷售價格(如果存在),否則需要零售價格。 如果是這樣,那么計算將是:
SUM(COALESCE(os.sale_price, p.retail_price) * s.sold_quantity) AS revenue
如果您想要折扣金額的總和,那么差異是有道理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.