SQL COUNT()查询放置

时间:2016-06-03 19:17:25

标签: mysql sql

我试图显示已售出10个或更多订单的所有销售人员的所有名字,以便在月底给他们奖金。

这些是我的表架构

CREATE TABLE Salesperson
(
SalespersonId BIGINT,
Name VARCHAR(50),
BirthDate DATE,
Salary INT
);

CREATE TABLE Orders
(
OrderId BIGINT,
OrderDate DATETIME,
SalespersonId BIGINT,
ProductId BIGINT,
SalesPrice DECIMAL(9,2)
);

然后这是我的查询

SELECT Salesperson.Name 
FROM Salesperson
JOIN Orders
ON Salesperson.SalespersonId=Orders.SalespersonId 
WHERE COUNT(Order.SalespersonId)> 10

我不确定我应该在哪里放置COUNT()函数,以使其返回销售员名称列表。

3 个答案:

答案 0 :(得分:3)

您需要GROUP BY,然后使用HAVING子句进行过滤:

SELECT Salesperson.Name 
FROM Salesperson
JOIN Orders
ON Salesperson.SalespersonId=Orders.SalespersonId 
GROUP BY Salesperson.Name 
HAVING COUNT(Order.SalespersonId)> 10

HAVING子句中使用的谓词:

COUNT(Order.SalespersonId)> 10

适用于每个Salesperson.Name组。因此,它将过滤掉任何人口等于10或更少的群组。

答案 1 :(得分:0)

你不能这样做。 where应用于行级,这意味着count()结果尚不可用。您必须改为使用HAVING,这在确定完整结果集并计算了所有聚合函数后应用。

答案 2 :(得分:0)

SELECT Salesperson.Name 
FROM Salesperson where Salesperson.SalespersonId in (
SELECT SalespersonId FROM Orders
 GROUP BY SalespersonId and having count(*) > 10 )