【问题标题】:Select lines with a column value greather than another column value选择列值大于另一列值的行
【发布时间】:2020-03-12 13:34:50
【问题描述】:

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

架构:(LIVRO 表示书)

我有这个问题:

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'
);

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

【问题讨论】:

  • 请不要将文本粘贴为屏幕截图。您的 SQL 控制台应该是文本副本,而不是屏幕截图。
  • 好的,我会编辑的。
  • 谢谢,确实有帮助

标签: mysql sql join count having-clause


【解决方案1】:

嗯,获取 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子句)来获取作者姓名。

【讨论】:

    【解决方案2】:

    您可以简单地删除子查询周围的COUNT(),并将其移动到子查询本身中:

    SELECT AUTORIA.CODAUTOR, AU.NOMEAUT, COUNT(AUTORIA.CODLIVRO) FROM AUTORIA
    INNER JOIN AUTOR AS AU ON AU.CODIGO = AUTORIA.CODAUTOR
    GROUP BY AUTORIA.CODAUTOR
    /* Get authors with more books than NAVATHE */
    HAVING COUNT(AUTORIA.CODLIVRO) > (
        SELECT COUNT(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'
    );
    

    【讨论】:

    • 成功了!只需在大于号后加一个括号:"> (".
    • 我正在分析另一个答案。但是当我正确理解另一个时,我可能会接受你的。无论如何谢谢:)
    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2013-08-15
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多