使用GROUP BY从多个表中进行SELECT

Are*_*yst 6 sql ms-access group-by count

我对多重查询有一点问题.(RDBMS:访问)

以下是数据库模式:(此查询中仅使用S_Cards,Books,Authors,Students表)S_Cards是学生书籍订单(在库中).

DB方案

查询:选择学生中最受欢迎的作者以及在图书馆中订购的作者书籍的编号.

虽然我可以在一个查询中获得这样的订单列表+这样的作者:

SELECT 
    Students.FirstName & " " & Students.LastName AS [Student], 
    Books.Name AS [Book], Authors.FirstName & " " & Authors.LastName AS [Author]
FROM 
    Students, 
    Books, 
    S_Cards, 
    Authors
WHERE 
    S_Cards.ID_Student = Students.ID 
AND S_Cards.ID_Book = Books.ID 
AND Books.ID_Author = Authors.ID
ORDER BY Authors.LastName
Run Code Online (Sandbox Code Playgroud)

结果(对不起,用俄语):

查询结果

我无法弄清楚,为什么我不能这样COUNT和GROUP BY:

SELECT 
    Students.FirstName & " " & Students.LastName AS [Student], 
    Books.Name AS [Book], 
    COUNT(Authors.FirstName & " " & Authors.LastName) AS [Number of books]
FROM Students, Books, S_Cards, Authors
WHERE 
    S_Cards.ID_Student = Students.ID 
AND S_Cards.ID_Book = Books.ID 
AND Books.ID_Author = Authors.ID
GROUP BY 3
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,'Authors.FirstName&""&Authors.LastName'不是静态函数或组的一部分.

问题:

  1. 有没有办法在没有JOIN的情况下进行此查询,只有GROUP BY,SELECT,UNION以及如何进行?
  2. 我的第二个查询中出现了什么问题?

Ben*_*Ben 0

SQL Server 中的字符串连接运算符+不是&另外,您应该按非聚合函数的事物进行分组。

SELECT Students.FirstName + ' ' + Students.LastName AS [Student]
     , Books.Name AS [Book]
     , COUNT(Authors.FirstName + ' ' + Authors.LastName) AS [Number of books]
  FROM Students
  JOIN S_Cards
    ON S_Cards.ID_Student = Students.ID
  JOIN BOOKS
    ON S_Cards.ID_Book = Books.ID 
  JOIN Authors
    ON Books.ID_Author = Authors.ID
 GROUP BY Students.FirstName + ' ' + Students.LastName
        , Books.Name
Run Code Online (Sandbox Code Playgroud)

请注意,我已将您的查询更改为标准 ANSI 连接语法,这使得错误更难犯并且更容易阅读。

仔细想想,你的伯爵似乎有些奇怪。不是书的数量吗COUNT(Books.ID)