在northwind数据库中查找具有向他/她报告的最大人数的经理。我写了一个查询:
Select reportsto from
(select top 1 reportsto,
count(reportsto)from employees group by
reportsto order by count(reportsto) desc)
但是它会出错
')'附近的语法不正确。
答案 0 :(得分:3)
这不是非常明确的消息意味着您需要在所述(最后一个)括号之后添加别名。 SQL Server要求您必须为子选择指定别名。所以,它应该是这样的:
Select reportsto from
(select top 1 reportsto,
count(reportsto)from employees group by
reportsto order by count(reportsto) desc) s /* 's' is just an example,
you can assign any alias */
请注意,这不适用于与IN
,EXISTS
,ANY/SOME
,ALL
等谓词一起使用的子查询。在这种情况下,您直接从子选择中提取数据,这恰好是子选择必须别名的情况。
另一方面,您在查询中尝试执行的操作并不需要进行子选择。这也可以:
select top 1 reportsto
from employees
group by reportsto
order by count(reportsto) desc
也就是说,您只需从SELECT子句中删除COUNT()
列,并按原样使用子查询的其余部分,结果将与原始意图相同。当然,除非我们能看到更多内容。
答案 1 :(得分:1)
尝试在count(reportsto)
之后添加空格。
count(reportsto) from
而不是
count(reportsto)from
答案 2 :(得分:1)
您可以使用以下
SELECT *
FROM Employees
WHERE EmployeeID IN (SELECT TOP 1 WITH TIES ReportsTo
FROM Employees
GROUP BY ReportsTo
ORDER BY COUNT(ReportsTo) DESC)
WITH TIES
选项表示如果多个经理有最多人向他们报告,您将获得所有人的详细信息。