SQL Count语法错误

时间:2015-11-12 19:32:39

标签: sql sql-server

我在SQL查询中计算两件事时遇到了麻烦。我需要从营销和销售人员中提取至少五次访问过的文件列表。我知道我错误地使用了COUNT,但我不知道怎么做。这是我到目前为止的查询:

SELECT FileId
FROM Files
JOIN FileAccesses ON Files.FileId = FileAccesses.FileId
WHERE Count(AccessUserGroup=1)>5 AND Count(AccessUserGroup=2)>5

它产生错误

  

')附近的语法错误。

Files是一个以int FileId为主键的表格。 FileAccesses存储来自FileId的{​​{1}}值,但不存储主键。每次用户触摸文件时,它都会跟踪一堆元数据。出于此问题的目的,重要的部分是FilesAccessUserGroup设置为tinyint用于营销,1用于销售。

2 个答案:

答案 0 :(得分:1)

这是您想要的查询:

JOIN

注意:

  • 您不需要FileAccesses,除非Files的文件ID不在GROUP BY中(我认为不太可能)。
  • 如果要使用聚合函数,则应使用HAVING
  • 比较符合COUNT()条款。
  • 带有表达式的SUM()在SQL Server中产生错误(它在其他一些数据库中有效)。带有CASE的{​​{1}}执行条件聚合。

答案 1 :(得分:0)

我猜您还需要实际的文件信息,而不仅仅是文件ID,因此您可以使用cte(公用表表达式)https://msdn.microsoft.com/en-us/library/ms175972.aspx

    ;WITH cte AS (
    SELECT FileAccesses.FileId FROM FileAccesses 
    GROUP BY FileId
    HAVING COUNT(CASE AccessUserGroup WHEN 1 THEN 1 ELSE NULL END) > 5 
    AND COUNT(CASE AccessUserGroup WHEN 2 THEN 1 ELSE NULL END) > 5
    )
    SELECT * FROM File 
    INNER JOIN cte ON File.FileId = cte.FileId