SQL - 帮助:如何在表中查找独立工作的作者?

问题描述 投票:0回答:1

我正在尝试解决这个 SQL 问题。

这些是我的桌子:

  • author
    (作者 ID、名字、中间名、姓氏)
  • written_by
    (bookdescID、authorID、角色)- 角色可以是“作者”、“编辑”或“翻译者”

我正在尝试查找从未与其他作者合作过的作者姓名列表,无论是合著者、合译者还是合编者。我花了几天时间试图找到这个解决方案,但找不到它。

这是我到目前为止所拥有的:

SELECT DISTINCT author.FIRSTNAME || ' ' || author.LASTNAME AS "Author Name"
FROM author
JOIN written_by ON author.AUTHORID = written_by.AUTHORID
WHERE author.AUTHORID = written_by.AUTHORID 
GROUP BY written_by.BOOKDESCID
HAVING COUNT(written_by.authorID) = 1; 

正确答案应该显示 321 行,但我一直加载 331 行。我的教授说我应该使用

NOT IN
,但我也找不到。

抱歉,我不是要你做作业,但我只是迷失了方向,似乎找不到正确的答案。非常感谢!

sql sqlite solution author sqlitestudio
1个回答
0
投票

您可以使用窗函数按

BOOKDESCID
进行计数。然后按作者分组,并检查他们的书籍中没有一本的 any 计数大于 1。您可以使用
HAVING
中的条件聚合来完成此操作。

SELECT
  a.FIRSTNAME || ' ' || a.LASTNAME AS "Author Name"
FROM (
    SELECT
      wb.*,
      COUNT(*) OVER (PARTITION BY wb.BOOKDESCID) AS countAuthors
    FROM written_by wb      
) wb
JOIN author a ON a.AUTHORID = wb.AUTHORID
GROUP BY
  a.AUTHORID,
  a.FIRSTNAME,
  a.LASTNAME
HAVING COUNT(CASE WHEN countAuthors > 1 THEN 1 END) = 0;
© www.soinside.com 2019 - 2024. All rights reserved.