Mysql 带条件的计数(不同)

Mysql 带条件的计数(不同),mysql,select,db2,Mysql,Select,Db2,在一个Select语句中,我有3个表可以从中检索值,它们是 讨论、用户信息和讨论注释 在DISCUSSION\u COMMENT中,我得到了一个USER\u ID列,需要在其中计算不同的条目 这里我用过 从讨论注释中选择COUNTDISTINCT USER\u ID 它工作得很好 但是我需要做一个select语句来从中获取所有的行值 讨论、用户信息和使用讨论中的DISU ID值来查找总计数 从讨论中\u注释表 SELECT COUNT(DISTINCT USER_ID) FROM DISCUS

在一个Select语句中,我有3个表可以从中检索值,它们是

讨论、用户信息和讨论注释

在DISCUSSION\u COMMENT中,我得到了一个USER\u ID列,需要在其中计算不同的条目

这里我用过

从讨论注释中选择COUNTDISTINCT USER\u ID

它工作得很好

但是我需要做一个select语句来从中获取所有的行值

讨论、用户信息和使用讨论中的DISU ID值来查找总计数

从讨论中\u注释表

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

其中DIS\u ID是我在讨论评论中的外键。

您的问题不清楚。看来你需要加入:

SELECT COUNT(DISTINCT SCHEMA.USER_ID) 
FROM DISCUSSION_COMMENT
JOIN DISCUSSION ON DISCUSSION_COMMENT.DIS_ID=DISCUSSION.DIS_ID
在英语中,这将计算对讨论发表评论的不同用户的数量

如果外键列具有引用完整性,则只需检查disu ID是否不为null:

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

我同意@Bohemian,我也建议您不要在MySQL查询中使用COUNT,如果行数太多,这会给服务器带来压力,您可以使用PHP中的本机COUNT函数或您编码的编程语言中的等效函数获得总结果。

这是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

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