【问题标题】:SQL query with grouping带分组的 SQL 查询
【发布时间】:2018-09-02 23:29:16
【问题描述】:

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

'显示每个卖家在 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,但按 Seller.id 分组不起作用。

【问题讨论】:

  • 不要使用旧式加入,也不会将卖家与销售联系起来

标签: sql select group-by


【解决方案1】:

您需要按未聚合的每一列进行分组,并将聚合函数应用于其他列。在这里,您需要将sellar_name 添加到group by 子句(这不应该更改分组,因为id 已经是唯一的)和sum 销售。

另外,附带说明一下,使用隐式连接(from 子句中有多个表)已被弃用数年,建议您改用显式 join

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;

【讨论】:

  • 非常感谢您,特别是旁注。它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 2016-10-20
相关资源
最近更新 更多