当前位置: 首页 > 面试题库 >

在MySQL查询中使用IF条件进行计数

禄奇希
2023-03-14
问题内容

我有两个表,一个表用于新闻,另一个表用于评论,我想获取其状态已设置为批准的评论数。

SELECT
    ccc_news . *, 
    count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments
FROM
    ccc_news
    LEFT JOIN
        ccc_news_comments
    ON ccc_news_comments.news_id = ccc_news.news_id
WHERE
    `ccc_news`.`category` = 'news_layer2'
    AND `ccc_news`.`status` = 'Active'
GROUP BY
    ccc_news.news_id
ORDER BY
    ccc_news.set_order ASC
LIMIT 20

但是此查询的问题在于,无论是否存在与该新闻相对应的评论,为评论列获取的最小值为1。

任何帮助将是非常可贵的。


问题答案:

使用sum()代替count()

请尝试以下方法:

SELECT
    ccc_news . * , 
    SUM(if(ccc_news_comments.id = 'approved', 1, 0)) AS comments
FROM
    ccc_news
    LEFT JOIN
        ccc_news_comments
    ON
        ccc_news_comments.news_id = ccc_news.news_id
WHERE
    `ccc_news`.`category` = 'news_layer2'
    AND `ccc_news`.`status` = 'Active'
GROUP BY
    ccc_news.news_id
ORDER BY
    ccc_news.set_order ASC
LIMIT 20


 类似资料:
  • 我想使用条件查询。 这是我的问题 这是我的java代码 它给出

  • 问题内容: 我正在尝试在MySQL选择查询中使用一条语句。 我在第一个语句之后出现错误。 为什么这不起作用?在MySQL查询中执行IF语句的正确方法是什么? 问题答案: 您使用的IF / THEN / ELSE构造仅在存储过程和函数中有效。您的查询将需要重组,因为您不能使用IF()函数来控制WHERE子句的流程。 可以在查询中使用的IF()函数主要用于在查询的SELECT部分​​中根据某些条件选择

  • 问题内容: 哪种是更好的Java编码风格? 要么: 问题答案: 当然是前者。后一种说法是多余的,只是表明您对布尔值的概念不太了解。 另一个建议:为变量选择其他名称。按照此Java样式指南: is前缀应用于布尔变量和方法。 ,,, , 这是Sun用于Java核心软件包的方法和变量的命名约定 。 使用前缀可以解决选择错误的布尔名称(如或)的常见问题。甚至 根本不合适,程序员被迫选择更有意义的名称。 变

  • 问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些

  • 问题内容: 我已经阅读了有关如何编写这些查询的多个示例,但是我正在努力使此特定代码像在使用时运行 这是匹配以a开头的用户名的正确方法吗? 问题答案: 不,您不需要内部单引号 您现在正在运行的语句将尝试匹配而不是匹配 bindParam将确保在将所有字符串数据提供给SQL语句时自动正确引用。

  • 我无法使用UDPATE AND IF条件更新表中的2个字段。需要帮助。 我有一个发票表格,如果字段号=0,我需要从同一表格中的容量和字段号=1更新字段数量。 我的sql语句不起作用: 错误消息: -您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在第1行的“IF(Nos=0)WHERE id=id”附近使用的正确语法