簡體   English   中英

SQL查詢總和,乘以並組合5個表然后分組

[英]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 應該對齊。

您特別說要添加R1R2 ,因此您描述的查詢如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM