Mysql 我怎样才能找到谁发送的消息比收到的消息多?
我有一个聊天应用程序的SQL数据库,我想找出哪个用户发送的消息比收到的消息多Mysql 我怎样才能找到谁发送的消息比收到的消息多?,mysql,Mysql,我有一个聊天应用程序的SQL数据库,我想找出哪个用户发送的消息比收到的消息多 CREATE TABLE Users(uid int PRIMARY KEY, name text, phone text); CREATE TABLE Messages( recipient int REFERENCES Users(uid), sender int REFERENCES Users(uid), time timestamp NOT NULL, message text NOT NULL, PRI
CREATE TABLE Users(uid int PRIMARY KEY, name text, phone text);
CREATE TABLE Messages( recipient int REFERENCES Users(uid),
sender int REFERENCES Users(uid), time timestamp NOT NULL,
message text NOT NULL, PRIMARY KEY (recipient, sender, time));
我尝试了示例中的一个,但它始终显示此消息
查询错误:错误:ER\u否\u这样的表:表“test.messages”不存在
我找不到我错在哪里
您可以使用此查询,它在两个派生表中统计每个发件人发送的邮件数和每个收件人收到的邮件数,然后根据与发件人或收件人匹配的
uid
将这些表连接到Users
表中。然后,它只选择具有se的用户nt比他们收到的邮件多:
SELECT u.name, m1.sent, m2.received
FROM Users u
LEFT JOIN (SELECT sender, COUNT(*) AS sent
FROM Messages
GROUP BY sender) m1 ON m1.sender = u.uid
LEFT JOIN (SELECT recipient, COUNT(*) AS received
FROM Messages
GROUP BY recipient) m2 ON m2.recipient = u.uid
WHERE sent > received
输出:
name sent received
John 4 3
Jim 5 2
Luis 3 1
您可以使用此查询,它在两个派生表中统计每个发件人发送的邮件数和每个收件人收到的邮件数,然后根据与发件人或收件人匹配的
uid
将这些表连接到Users
表中。然后,它只选择具有sen的用户t比他们收到的消息多:
SELECT u.name, m1.sent, m2.received
FROM Users u
LEFT JOIN (SELECT sender, COUNT(*) AS sent
FROM Messages
GROUP BY sender) m1 ON m1.sender = u.uid
LEFT JOIN (SELECT recipient, COUNT(*) AS received
FROM Messages
GROUP BY recipient) m2 ON m2.recipient = u.uid
WHERE sent > received
输出:
name sent received
John 4 3
Jim 5 2
Luis 3 1
我认为你正在从不同的数据库访问表。你的数据库名是什么?我认为你正在从不同的数据库访问表。你的数据库名是什么?@ GigOrgMasz回答了你的问题吗?如果不是,你能提供更多的信息来帮助回答吗?否则,请考虑标记答案。(在上/下投票箭头上的复选标记)。参见@ GigOrgMasz是否回答了您的问题?如果不是,您能提供更多的信息来帮助回答吗?否则,请考虑标记已接受的答案(在上/下投票箭头下的复选标记)。