SQL182. 某宝店铺折扣率
描述
item_id | style_id | tag_price | inventory |
A001 | A | 100 | 20 |
A002 | A | 120 | 30 |
A003 | A | 200 | 15 |
B001 | B | 130 | 18 |
B002 | B | 150 | 22 |
B003 | B | 125 | 10 |
B004 | B | 155 | 12 |
C001 | C | 260 | 25 |
C002 | C | 280 | 18 |
sales_date | user_id | item_id | sales_num | sales_price |
2021-11-01 | 1 | A001 | 1 | 90 |
2021-11-01 | 2 | A002 | 2 | 220 |
2021-11-01 | 2 | B001 | 1 | 120 |
2021-11-02 | 3 | C001 | 2 | 500 |
2021-11-02 | 4 | B001 | 1 | 120 |
2021-11-03 | 5 | C001 | 1 | 240 |
2021-11-03 | 6 | C002 | 1 | 270 |
2021-11-04 | 7 | A003 | 1 | 180 |
2021-11-04 | 8 | B002 | 1 | 140 |
2021-11-04 | 9 | B001 | 1 | 125 |
2021-11-05 | 10 | B003 | 1 | 120 |
2021-11-05 | 10 | B004 | 1 | 150 |
2021-11-05 | 10 | A003 | 1 | 180 |
2021-11-06 | 11 | B003 | 1 | 120 |
2021-11-06 | 10 | B004 | 1 | 150 |
discount_rate(%) |
93.97 |
示例1
输入:
drop table if exists product_tb; CREATE TABLE product_tb( item_id char(10) NOT NULL, style_id char(10) NOT NULL, tag_price int(10) NOT NULL, inventory int(10) NOT NULL ); INSERT INTO product_tb VALUES('A001', 'A', 100, 20); INSERT INTO product_tb VALUES('A002', 'A', 120, 30); INSERT INTO product_tb VALUES('A003', 'A', 200, 15); INSERT INTO product_tb VALUES('B001', 'B', 130, 18); INSERT INTO product_tb VALUES('B002', 'B', 150, 22); INSERT INTO product_tb VALUES('B003', 'B', 125, 10); INSERT INTO product_tb VALUES('B004', 'B', 155, 12); INSERT INTO product_tb VALUES('C001', 'C', 260, 25); INSERT INTO product_tb VALUES('C002', 'C', 280, 18); drop table if exists sales_tb; CREATE TABLE sales_tb( sales_date date NOT NULL, user_id int(10) NOT NULL, item_id char(10) NOT NULL, sales_num int(10) NOT NULL, sales_price int(10) NOT NULL ); INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001', 1, 90); INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002', 2, 220); INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001', 1, 120); INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001', 2, 500); INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001', 1, 120); INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001', 1, 240); INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002', 1, 270); INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003', 1, 180); INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002', 1, 140); INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001', 1, 125); INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003', 1, 120); INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004', 1, 150); INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003', 1, 180); INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003', 1, 120); INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004', 1, 150);
输出:
93.97
Mysql 解法, 执行用时: 36ms, 内存消耗: 6508KB, 提交时间: 2021-12-31
select round(sum(sales_price)*100/sum(sales_num*tag_price),2) discount_rate from sales_tb left join product_tb using(item_id)
Mysql 解法, 执行用时: 37ms, 内存消耗: 6372KB, 提交时间: 2021-12-04
SELECT round(sum(sales_price)*100/sum(sales_num* tag_price),2) FROM sales_tb st left JOIN product_tb pt on st.item_id=pt.item_id #GMV为已付款订单和未付款订单两者之和。结果按GMV升序排序。
Mysql 解法, 执行用时: 37ms, 内存消耗: 6380KB, 提交时间: 2021-12-18
select round (sum(sales_price)/ sum(sales_num * tag_price)*100,2) as 'discount_rate(%)' from sales_tb left join product_tb on sales_tb.item_id=product_tb.item_id;
Mysql 解法, 执行用时: 37ms, 内存消耗: 6384KB, 提交时间: 2021-12-14
SELECT round((sum(sales_price)/sum(tag_price*sales_num))*100,2) from product_tb LEFT JOIN sales_tb USING(item_id)
Mysql 解法, 执行用时: 37ms, 内存消耗: 6396KB, 提交时间: 2022-01-28
SELECT ROUND(SUM(a.sales_price) / SUM(a.sales_num * b.tag_price)*100,2) FROM sales_tb a LEFT JOIN product_tb b ON a.item_id = b.item_id WHERE MONTH(a.sales_date) = 11