以下查询将显示"book"表中重复的所有杜威十进制数:

SELECT dewey_number, 
 COUNT(dewey_number) AS NumOccurrences
FROM book
GROUP BY dewey_number
HAVING ( COUNT(dewey_number) > 1 )

然而,我想做的是让我的查询显示与复制条目相关联的作者的姓名("book"表和"author"表通过"author_id"连接).换句话说,上述查询将产生以下结果:

dewey_number | NumOccurrences
------------------------------
5000         | 2
9090         | 3

我希望显示的结果类似于以下内容:

author_last_name | dewey_number | NumOccurrences
-------------------------------------------------
Smith            | 5000         | 2
Jones            | 5000         | 2
Jackson          | 9090         | 3
Johnson          | 9090         | 3
Jeffers          | 9090         | 3

非常感谢您提供的任何帮助.为了防止它发挥作用,我正在使用Postgresql数据库.

UPDATE:请注意,"作者姓氏"不在"图书"表中.

推荐答案

嵌套查询可以完成这项工作.

SELECT author_last_name, dewey_number, NumOccurrences
FROM author INNER JOIN
     ( SELECT author_id, dewey_number,  COUNT(dewey_number) AS NumOccurrences
        FROM book
        GROUP BY author_id, dewey_number
        HAVING ( COUNT(dewey_number) > 1 ) ) AS duplicates
ON author.id = duplicates.author_id

(我不知道这是否是实现目标的最快方式.)

更新:这是我的数据

SELECT * FROM author;
 id | author_last_name 
----+------------------
  1 | Fowler
  2 | Knuth
  3 | Lang

SELECT * FROM book;
 id | author_id | dewey_number |         title          
----+-----------+--------------+------------------------
  1 |         1 |          600 | Refactoring
  2 |         1 |          600 | Refactoring
  3 |         1 |          600 | Analysis Patterns
  4 |         2 |          600 | TAOCP vol. 1
  5 |         2 |          600 | TAOCP vol. 1
  6 |         2 |          600 | TAOCP vol. 2
  7 |         3 |          500 | Algebra
  8 |         3 |          500 | Undergraduate Analysis
  9 |         1 |          600 | Refactoring
 10 |         2 |          500 | Concrete Mathematics
 11 |         2 |          500 | Concrete Mathematics
 12 |         2 |          500 | Concrete Mathematics

以上查询结果如下:

 author_last_name | dewey_number | numoccurrences 
------------------+--------------+----------------
 Fowler           |          600 |              4
 Knuth            |          600 |              3
 Knuth            |          500 |              3
 Lang             |          500 |              2

Postgresql相关问答推荐

将几个左连接合并为一个

使用多个分隔符拆分SQL

使用jOOQ在postgres上取消嵌套enum_range

在PostGreSQL中获取最近日期的项目

gitlab在ubuntu上安装duplicate schema问题

Postgres 将分区附加到表的时间太长.想明白为什么

Postgresql如何从jsonB列的数组中的多个json中 Select 一个值

PostgreSQL - 如何获得前一个月和一周的价值?

并行取消嵌套多个数组

转换数组类型

PostgreSQL:根据排序顺序仅 Select 每个 id 的第一条记录

如何判断每个组中是否存在值

H2 postgresql mode模式似乎不起作用

Postgres 日期重叠约束

SQL:多次重复结果行,并对行进行编号

如何增加 max_locks_per_transaction

查询 JSON 列中的数组元素

PostgreSQL - 必须出现在 GROUP BY 子句中或在聚合函数中使用

使用 PostgreSQL 进行字母数字排序

postgresql 删除级联