我试图显示已售出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()
函数,以使其返回销售员名称列表。
答案 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 )