SQL计算总价
这里是新的(加上抱歉英语不好…),我在这里的两个表中遇到了一些SQL问题-销售和产品:SQL计算总价,sql,Sql,这里是新的(加上抱歉英语不好…),我在这里的两个表中遇到了一些SQL问题-销售和产品: Product: ProductID | Product | Price ____________________________ 1 | walnuts | 16 2 | cashew | 25 3 | peanuts | 4 Sells (each product kilograms sold): Day | walnuts | cashew | h
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天的总收入(例如),那么我如何计算呢?这不是很容易维护,但如果这是您的实际数据,出于某种原因,您不想手工计算,那么这种模式应该可以工作。(未在真实数据上测试,但希望足够接近,让您继续)
你设计桌子的方法不好
**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。更改您的表格结构
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
);
您的数据库表结构不好。
使用产品种类作为列不是一种方式。而是使用以下结构:
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
我把价格列放在销售表中,因为实际销售价格每天都可能变化
一旦表格在这个结构中,你们就可以做分组汇总了。
以下是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的答案将是你的。你应该改变你的桌子设计。不要使用值是列名如果这是SQL Server,您可以使用
UNPIVOT
子句简化此操作,但在任何情况下,您可能都不希望值作为列名。是的。。我猜,但我现在被卡住了:/有什么建议吗?第一个问题。您正在使用哪个数据库管理系统?????这是最重要的信息。dbms之间的语法可能会有所不同。由于您刚刚开始,我建议您更改表设计。每个表上只有3条记录,您无法解决它。想象一下,当有数百万条记录时。
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