【问题标题】:COUNT (DISTINCT) With ConditionCOUNT (DISTINCT) 有条件
【发布时间】:2014-02-24 05:19:21
【问题描述】:

我有 3 个表可以从单个 Select 语句中检索值,这些表是

DISCUSSION,USER_INFO & DISCUSSION_COMMENT.

DISCUSSION_COMMENT 中,我有一个USER_ID 列,我需要在其中计算不同的条目。

这里我用过

SELECT COUNT(DISTINCT USER_ID) FROM DISCUSSION_COMMENT

它的工作正常。

但是我需要做一个单一的选择语句来获取所有的行值

DISCUSSION,USER_INFO 并使用 DIS_ID 中的值 DISCUSSION 来查找总数

来自DISCUSSION_COMMENT 表喜欢

SELECT COUNT(DISTINCT USER_ID) 
FROM DISCUSSION_COMMENT
WHERE DISCUSSION_COMMENT.DIS_ID=DISCUSSION.DIS_ID

其中 DIS_ID 是我在 DISCUSSION_COMMENT 中的外键。

【问题讨论】:

    标签: mysql select db2


    【解决方案1】:

    您的问题不清楚。 似乎你需要加入:

    SELECT COUNT(DISTINCT SCHEMA.USER_ID) 
    FROM DISCUSSION_COMMENT
    JOIN DISCUSSION ON DISCUSSION_COMMENT.DIS_ID=DISCUSSION.DIS_ID
    

    在英语中,这将计算对讨论发表评论的不同用户的数量。

    如果您在外键列上具有引用完整性,则只需检查 DIS_ID 是否不为空:

    SELECT COUNT(DISTINCT SCHEMA.USER_ID) 
    FROM DISCUSSION_COMMENT
    WHERE DIS_ID IS NOT NULL
    

    【讨论】:

      【解决方案2】:

      我同意@Bohemian,我也建议你不要在 MySQL 查询中使用 COUNT(),如果行数很大这会对服务器造成压力,你可以使用原生的 count() 函数得到总结果PHP 或与您的编码相同的编程语言。

      【讨论】:

      • 这是一个糟糕的解决方案。返回所有行至少与在数据库服务器上计算它们一样慢。如果您需要围绕 MySQL 限制进行优化,您可以在讨论表中创建一个 comment_count 列,并在您创建或删除评论时更新它。
      • 使用@Leons也是一个不错的选择,在sql查询中使用减去COUNT的任何东西。
      【解决方案3】:

      这是 MySQL 问题还是 DB2 问题?两者都被标记。

      对于 DB2,我建议使用聚合查询:

      SELECT COUNT(dc.user_id), dc.dis_id
      FROM discussion_comment dc, discussion d
      GROUP BY dc.dis_id
      HAVING dc.dis_id = d.dis_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-19
        • 2014-03-13
        • 1970-01-01
        • 2016-04-04
        • 2013-05-12
        • 2012-12-12
        • 2023-03-29
        相关资源
        最近更新 更多