mysql - 选择列值大于另一列值的行

标签 mysql sql join count having-clause

我正在尝试获取比我的数据库中的特定作者拥有更多图书的所有作者的姓名。

架构:(LIVRO 表示 BOOK)

Part of the Database Schema

我有这个问题:

SELECT AUTORIA.CODAUTOR, AU.NOMEAUT, COUNT(AUTORIA.CODLIVRO) FROM AUTORIA
INNER JOIN AUTOR AS AU ON AU.CODIGO = AUTORIA.CODAUTOR
GROUP BY AUTORIA.CODAUTOR;

这就是返回:

+----------+------------------+-------------------------+
| CODAUTOR | NOMEAUT          | COUNT(AUTORIA.CODLIVRO) |
+----------+------------------+-------------------------+
|        1 | MACHADO DE ASSIS |                       7 |
|        2 | NAVATHE          |                       6 |
|        3 | ELMASRI          |                       7 |
+----------+------------------+-------------------------+

现在我需要使用列 COUNT(AUTORIA.CODLIVRO) 的值大于作者 NAVATHE 的该列值的行过滤此结果。

这就是我的尝试:

SELECT AUTORIA.CODAUTOR, AU.NOMEAUT, COUNT(AUTORIA.CODLIVRO) FROM AUTORIA
INNER JOIN AUTOR AS AU ON AU.CODIGO = AUTORIA.CODAUTOR
GROUP BY AUTORIA.CODAUTOR /* Group books by author code */
/* Get authors with more books than NAVATHE */
HAVING COUNT(AUTORIA.CODLIVRO) > COUNT( /* Count how many books NAVATHE has */
    SELECT AUTORIA.CODLIVRO FROM AUTORIA /* Obtain the codes of the books of NAVATHE */
    INNER JOIN AUTOR AS AU ON AU.CODIGO = AUTORIA.CODAUTOR AND AU.NOMEAUT = 'NAVATHE'
);

但是这个查询给了我一个错误。

最佳答案

嗯,获取 id 的一种方法是:

SELECT a.CODAUTOR
FROM AUTORIA a
GROUP BY a.CODAUTOR
HAVING COUNT(*) > (SELECT COUNT(*)
                   FROM AUTORIA a2 JOIN
                        AUTOR au
                        ON au.CODIGO = a2.CODAUTOR
                   WHERE au.nome = 'NAVATHE'
                  );

我会让您计算出JOIN(或INEXISTS 子句)来获取作者姓名。

关于mysql - 选择列值大于另一列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58893271/

相关文章:

java - JDBC PreparedStatement 奇怪的行为

mysql - 如何使用 INNER JOIN 接收另一个表中具有学生 ID 的用户的名字?

PHP include doc 不获取 $_GET 变量

php - 如何遍历 mysql_query() 结果

java - 使用 Java 将时间和日期插入数据库时​​出现问题

mysql - SQL查询删除特定条件的行

Mysql 转储还原失败 : Cannot add foreign key constraint

php - Mysqli 查询不返回任何行

mysql - 创建联接以显示 T1 中不在 T2 中的一列的值,并进行一些比较

mysql - 分组时对 JOIN 结果进行排序