MySQL - 如何连接这些表以获得正确的结果?

时间:2014-02-24 12:19:25

标签: mysql sql

我已经尝试了几个小时来解决这个问题,但它仍然不起作用..

我有两张桌子:

  • 价格
  • 销售

记录如下:

价格

product_name   price
--------------------
Milk           0.80
Cheese         1.00
Bread          1.50

销售

customer_id  product_name  number_purchases
-------------------------------------------
15           Milk          2
15           Cheese        1
2            Butter        2
2            Candy         4
80           Bread         1
...
...
15           Bread          2
15           Milk           1

每周跟踪销售情况,客户可以在购买相同商品的情况下在数据库中多次出现(例如客户15每周购买两次牛奶,因此客户15购买了3包牛奶。

我想找到某个客户: 他/她购买的每件产品,以及相应的产品购买总数,以及相应的产品价格。

这是我到目前为止没有错误:

SELECT product_name, SUM(number_purchases)
FROM sales S
WHERE customer_id = 80
GROUP BY product_name;

但是当我想在代码中添加一些行时,为了获得相应的价格,它也不起作用。我试过的其中一件事:

SELECT product_name, SUM(number_purchases), price
FROM sales S, prices P
WHERE S.product_name = P.productname
AND customer_id = 80
GROUP BY product_name;

这只在一个查询中是不可能的,还是我错过了什么?

非常感谢

3 个答案:

答案 0 :(得分:3)

您的上一个查询是customer_id分组。尝试将其更改为product_name

SELECT S.product_name, SUM(S.number_purchases), P.price
FROM sales S, prices P
WHERE S.product_name = P.product_name
AND S.customer_id = 80
GROUP BY S.product_name;

您还应该永远from子句中使用逗号。而是在第一个示例中使用显式连接,并在price上聚合(或将price移动到group by子句):

SELECT S.product_name, SUM(S.number_purchases), sum(P.price) total_price
FROM sales S join
     prices P
     ON S.product_name = P.product_name
WHERE S.customer_id = 80
GROUP BY S.product_name;

答案 1 :(得分:0)

您的查询应该是:

SELECT product_name, SUM(number_purchases), price
FROM sales S, prices P
WHERE S.product_name = P.productname
AND customer_id = 80
GROUP BY P.productname;

答案 2 :(得分:0)

使用别名

SELECT s.product_name, SUM(number_purchases), price
FROM sales S, prices P
WHERE S.product_name = P.productname
AND customer_id = 80
GROUP BY s.product_name;

DBMS - 不知道product_name得到

P.S。而且我认为你必须在

组中加价