带分组的SQL查询

时间:2018-03-24 11:16:35

标签: sql select group-by

通过解决以下任务我遇到了问题:

'通过在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分组不起作用。

1 个答案:

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