通过解决以下任务我遇到了问题:
'通过在2013年销售产品PS4,向每个卖家展示他赚多少钱(数量* product_price)
关系是:
seller(id , seller_name, advertised_by);
product( id, product_name, product_price);
sale(id, seller_id, product_id, quantity, date);
我插入了以下数据:
INSERT into seller VALUES
(1,'Bob',NULL),
(2,'Mary',1),
(3,'Peter',1),
(4,'Parker',1),
(5,'Jeff',1);
INSERT INTO product VALUES
(1,'PS4',100),
(2,'XBOX One',300),
(3,'Laptop',500);
INSERT INTO sale VALUES
(1,1,1,1,'4 5 2013'),
(2,2,1,2,'5 6 2013'),
(3,3,1,3,'6 6 2013'),
(4,4,1,4,'6 6 2013');
我知道不使用外键或使用varchar作为日期并不好,但我希望这个例子很简单。
SELECT seller.id,seller.seller_name, (sale.quantity * product.price) AS sale
FROM seller,product,sale
WHERE product.id = sale.product_id
AND product.product_name = 'PS4'
AND sale.date like '%2013'
GROUP by seller.id;
我知道我必须使用GROUP BY,但是按sell.id分组不起作用。
答案 0 :(得分:2)
您需要按未聚合的每个列进行分组,并将聚合函数应用于其他列。在这里,您需要将sellar_name
添加到group by
子句(不应更改分组,因为ID已经是唯一的),以及sum
销售。
另外,作为旁注,使用隐式连接(在from
子句中有多个表)已被弃用了几年,建议您使用显式join
代替:< / p>
SELECT seller.id,seller.seller_name, SUM(sale.quantity * product.price) AS sale
FROM seller
JOIN sale ON sale.seller_id = seller.id
JOIN product ON product.id = sale.product_id
WHERE product.product_name = 'PS4' AND sale.date like '%2013'
GROUP BY seller.id;