SQL计算总价

时间:2017-12-15 18:16:09

标签: sql

这里有新的(加上对不起的英文错误..),我在这里有两个表有一些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天赚取的总金额(例如),那么我该如何计算呢?

4 个答案:

答案 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
);