Mysql计数(*)基于两个关系

Mysql计数(*)基于两个关系,mysql,Mysql,我想计算一下(*)有多少客户创建了帖子或发表了评论。如果同一个客户发表了多篇帖子和评论,则只计算一次 客户表: ID名称.. 1Jonh 2标记 3King 4Doe 邮政表格: ID用户ID. 11 21 33 41 注释表: ID用户ID. 11 23 33 44 它应该返回count(*)=3 (用户id:1、3和4)。这应该可以: SELECT COUNT(DISTINCT USER_ID) FROM ( SELECT USER_ID FROM POST_TABLE UNION SE

我想计算一下(*)有多少客户创建了帖子或发表了评论。如果同一个客户发表了多篇帖子和评论,则只计算一次


客户表:
ID
名称
..

1
Jonh

2
标记

3
King

4
Doe

邮政表格:
ID
用户ID
.

1
1

2
1

3
3

4
1

注释表:
ID
用户ID
.

1
1

2
3

3
3

4
4

它应该返回count(*)=3
用户id:1、3和4)。

这应该可以:

SELECT COUNT(DISTINCT USER_ID) FROM (
SELECT USER_ID FROM POST_TABLE 
UNION
SELECT USER_ID FROM COMMENT_TABLE
)
这应该起作用:

SELECT COUNT(DISTINCT USER_ID) FROM (
SELECT USER_ID FROM POST_TABLE 
UNION
SELECT USER_ID FROM COMMENT_TABLE
)

试试这个。它对我起了作用,并返回了您想要的:

SELECT COUNT( USER_ID ) AS TOTAL
FROM (
SELECT USER_ID
FROM POSTS
UNION
SELECT USER_ID
FROM COMMENTS
)X

我使用POSTS和COMMENTS作为表名,因为我不确定确切的表名是什么,所以请确保在查询中更改它们。

试试这个。它对我起了作用,并返回了您想要的:

SELECT COUNT( USER_ID ) AS TOTAL
FROM (
SELECT USER_ID
FROM POSTS
UNION
SELECT USER_ID
FROM COMMENTS
)X


我使用POSTS和COMMENTS作为表名,因为我不确定您的确切表名是什么,所以请确保在查询中更改它们。

您发布的数据的所需输出应该是什么?@Maximus2012它应该返回count(*)=3(用户id:1、3和4)。关于
选择count(不同的用户id)呢Asposts
?@Maximus2012这是为了计算有多少客户与我的平台进行了交互、发布或甚至评论。
选择count(DISTINCT p.USER\u ID)作为posts,count(DISTINCT c.USER\u ID)作为Post p internal JOIN Comment c ON的评论(p.USER\u ID=c.USER\u ID)
这应该只计算这些用户ID,他发表了帖子和评论。未测试,就像一个想法一样您发布的数据的期望输出应该是什么?@Maximus2012它应该返回count(*)=3(用户id:1、3和4)。关于
如何选择count(不同的用户id)作为posts
?@Maximus2012这是为了计算有多少客户与我的平台交互,发布或甚至评论。
选择COUNT(DISTINCT p.USER\u ID)作为帖子,COUNT(DISTINCT c.USER\u ID)作为Post p内部连接评论c ON(p.USER\u ID=c.USER\u ID)
这应该只计算发表帖子和评论的这些用户ID。没有测试,只是作为一个想法,你忘了将
..)添加为c
@xORIF,否则我认为没有必要@Martin SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名几乎,您忘了将
..)添加为c
@xORIF,否则我认为没有必要@Martin SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名它工作得很好!只是想了解一下,X的最终功能是什么?X只是子查询创建的临时表的别名。使用别名可以让您在外部select语句中引用它,即使我的示例中没有。您还可以帮助我获取具有更多评论和帖子交互的前10个有序用户ID吗?请尝试此查询。您可能希望限制为输出选择的字段,也可能需要所有字段。您可以决定。
SELECT*,USERPOSTS+USERCOMMENTS作为TOTALACTIVITY FROM(SELECT CUSTOMERS.*,(SELECT COUNT(*)FROM POSTS WHERE.USER_ID=CUSTOMERS.ID)作为USERPOSTS,(SELECT COUNT(*)FROM COMMENTS WHERE COMMENTS.USER_ID=CUSTOMERS.ID)作为USERCOMMENTS FROM CUSTOMERS)x TOTALACTIVITY DESC LIMIT 10订单
它工作得非常好!只是想了解一下,X的最终功能是什么?X只是子查询创建的临时表的别名。使用别名可以让您在外部select语句中引用它,即使我的示例中没有。您还可以帮助我获取具有更多评论和帖子交互的前10个有序用户ID吗?请尝试此查询。您可能希望限制为输出选择的字段,也可能需要所有字段。您可以决定。
SELECT*,USERPOSTS+USERCOMMENTS作为TOTALACTIVITY FROM(SELECT CUSTOMERS.*,(SELECT COUNT(*)FROM POSTS WHERE POSTS.USER\u ID=CUSTOMERS.ID)作为USERPOSTS,(SELECT COUNT(*)FROM COMMENTS WHERE COMMENTS.USER\u ID=CUSTOMERS.ID)作为USERCOMMENTS FROM CUSTOMERS)x ORDER BY TOTALACTIVITY DESC LIMIT 10