这里有新的(加上对不起的英文错误..),我在这里有两个表有一些SQL难题 - 销售和产品:
Product:
ProductID | Product | Price
____________________________
1 | walnuts | 16
2 | cashew | 25
3 | peanuts | 4
Sells (each product kilograms sold):
Day | walnuts | cashew | hazelnut
__________________________________
1 | 2 | 3 | 1
2 | 8 | 6 | 25
3 | 1 | 3 | 12
我想要显示的是第2天赚取的总金额(例如),那么我该如何计算呢?
答案 0 :(得分:3)
你设计桌子的方式并不好。
**Item table:**
product_id | product_name | price
__________________________________
1 | Some1 | 20
2 | Some2 | 30
3 | Some3 | 40
**sale table :**
sale_id | product_id | quantity
__________________________________
1 | 2 | 2
2 | 1 | 1
3 | 3 | 2
现在应用查询:
SELECT sale.quantity*item.price as TOTAL FROM item,sale WHERE item.product_id=sale.product_id;
如果您有更多列,则可以应用更多过滤器。
答案 1 :(得分:2)
<强> 1。更改表格结构
你的db表结构不好。 使用产品种类作为专栏不是方法。而是使用以下结构:
Product:
ProductID | Product | Price
____________________________
1 | walnuts | 16
2 | cashew | 25
3 | peanuts | 4
Sells (each product kilograms sold):
Day | ProductID | Amt | Price
__________________________________
1 | 1 | 2 | 15
1 | 2 | 3 | 25
1 | 3 | 1 | 4
2 | 1 | 8 | 16
2 | 2 | 6 | 23
2 | 3 | 25 | 5
3 | 1 | 1 | 16
3 | 2 | 3 | 25
3 | 3 | 12 | 4
我在Sells表中列出了价格栏,因为实际销售价格可以每天变化。
在此结构中的表格之后,您可以进行分组总结。 以下是MySQL查询:
SELECT SUM(Amt * Price) AS total FROM Sells WHERE Day=2 GROUP BY Day
如果您想每天检查产品本身的详细信息,可以尝试以下操作:
SELECT p.ProductID, p.Product, SUM(s.Amt * s.Price) AS total
FROM Sells AS s
LEFT JOIN Product AS p ON s.ProductID = p.ProductID
WHERE s.Day=2 GROUP BY s.Day, s.Product
<强> 2。如果无法改变,那么......
@Kanagaraj Dhanapal的回答将是你的。
答案 2 :(得分:0)
这不是很容易维护,但如果这是您的实际数据,并且由于某种原因您不想手动计算,那么此模式应该可行。 (没有对真实数据进行测试,但希望足够接近让你前进)
select
s.Day,
p.Product,
SUM(
CASE p.Product
WHEN 'walnuts' THEN p.Price * s.walnuts
WHEN 'cashew' THEN p.Price * s.cashew
WHEN 'peanuts' THEN p.Price * s.peanuts
END
) Total
from Product p full join Sells s
group by s.Day, p.Product
答案 3 :(得分:0)
SELECT SUM(prince)
FROM (
SELECT CASE
WHEN p.product = "walnuts"
THEN (s.walnuts * p.price)
WHEN p.product = "cashew"
THEN (s.cashew * p.price)
WHEN p.product = "hazelnut"
THEN (s.hazelnut * p.price)
ELSE NULL
END AS price
FROM sells s
JOIN product p
WHERE Day = 2
);