SELECT FirstName,
MiddleName,
LastName,
COUNT(*) AS 'Count'
FROM Person.Person TABLESAMPLE(10 PERCENT)
给我错误
Msg 8120,Level 16,State 1,Line 1列'Person.Person.FirstName' 在选择列表中无效,因为它不包含在任何一个中 聚合函数或GROUP BY子句。
有人可以解释我做错了吗?
答案 0 :(得分:4)
SELECT FirstName, MiddleName, LastName,
[count] = COUNT(*) OVER()
FROM Person.Person
TABLESAMPLE (10 PERCENT);
虽然您可能更喜欢以下内容,但由于TABLESAMPLE
存在一些问题IIRC(对我来说,TABLESAMPLE
每次都会返回不可预测的行数,这也会阻止您计算整个表中的行数):
SELECT TOP 10 PERCENT FirstName, MiddleName, LastName,
[count] = COUNT(*) OVER()
FROM Person.Person
ORDER BY [something];
如果您真的想要一组随机行,可以使用ORDER BY NEWID();
。如果您想要查询返回的实际计数,而不是实际表中的行数,只需按照您的查询(没有COUNT
聚合):
SELECT @@ROWCOUNT;
另外,请不要将'single quotes'
用于列别名 - 在某些情况下不推荐使用此语法,并且使别名看起来像字符串文字。当您需要转义别名,因为它们是关键字或包含空格或违反标识符规则时,请使用[square brackets]
。
答案 1 :(得分:2)
每次你要使用任何聚合函数(sum,count,avg等)时,你必须识别你的GROUP子句;
在您的查询中,您要确定每个名字,中间名和姓氏的行数:
SELECT FirstName,
MiddleName,
LastName,
COUNT(*) AS 'Count'
FROM Person.Person TABLESAMPLE(10 PERCENT)
GROUP BY FirstName, MiddleName,LastName;
如果你想知道你有多少人:
SELECT COUNT(*) AS 'Count'
FROM Person.Person TABLESAMPLE(10 PERCENT);