【问题标题】:How can I add an additional condition to this query (using CASE)?如何向此查询添加附加条件(使用 CASE)?
【发布时间】:2010-11-26 13:55:49
【问题描述】:

这是我目前的查询:

选择
帖子.title
, SUM(CASE cmets.status WHEN 'approved' THEN 1 END) AS cmetsCount
来自帖子
内连接 cmets
打开 cmets.postID = posts.id
在哪里
post.status = ?
分组
帖子.title
订购者
cmetsCount DESC
限制 5

当它获得commentsCount 时,我还需要检查comment.flagged = 0。我尝试在SUM() 调用中添加额外的CASEs,但这导致了致命错误。我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: mysql conditional case


    【解决方案1】:

    看起来你真正想做的是:

    SELECT
    posts.title
    , COUNT(*) AS commentsCount
    FROM posts
    INNER JOIN comments
    ON comments.postID = posts.id
    AND comments.status = 'approved'
    AND comments.flagged = 0
    WHERE
    posts.status = ?
    GROUP BY
    posts.title
    ORDER BY
    commentsCount DESC
    LIMIT 5
    

    由于您只对status'approved'comments 感兴趣,因此条件应为连接条件。

    编辑:我已经更新了查询,假设您要计算 status'approved'flagged 等于 0 的 cmets。

    【讨论】:

    • 我需要获取已批准且标记列 = 0 的 cmets。我尝试了您的 SQL,并收到此错误消息:“您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'WHEN 'approved' WHERE posts.status = 附近使用的正确语法GROUP BY posts.title ORDER'
    • 您能解释一下您在问题中实际想要达到的目标吗?用简单的英语。例如,“我正在尝试获取状态为‘已批准’的 cmets 最多的 5 个帖子”,但标记部分除外。
    • 除了 COUNT(*),此代码工作正常。感谢您的帮助!
    【解决方案2】:
    SELECT
    posts.title
    , SUM(IF ((comments.status='approved' AND  comments.flagged = 0),1,0)) AS commentsCount
    FROM posts
    INNER JOIN comments
    ON comments.postID = posts.id
    WHERE
    posts.status = ?
    GROUP BY
    posts.title
    ORDER BY
    commentsCount DESC
    LIMIT 5
    

    【讨论】:

    • 这段代码给了我这个错误:'你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '),1,0) 附近使用正确的语法 AS cmetsCount FROM posts INNER JOIN cmets ON cmets.postID = p'
    • 现在可以了,谢谢 :) 我很好奇你的方法是否比我发布的我自己的答案更有效。
    • @Arms,在每个 SELECT 前加上 EXPLAIN 以查看数据库打算使用的查询策略。然后你就会知道哪个更有效。
    【解决方案3】:

    基于 Josh Davis 的 SQL,这对我有用:

    选择
    帖子.title
    ,posts.slug
    , COUNT(cmets.id) AS cmetsCount
    来自帖子
    内连接 cmets
    打开 cmets.postID = posts.id
    AND cmets.status = '已批准'
    AND cmets.flagged = 0
    在哪里
    post.status = ?
    分组
    帖子.title
    订购者
    cmetsCount DESC
    限制 5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2021-02-21
      • 2022-11-25
      • 2020-11-02
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      相关资源
      最近更新 更多