我有一个聊天应用程序中的两个表
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)
);
我如何查找用户使用例如250开头的电话发送了多少条消息? 以及如何查找发送的邮件多于收到的用户的名称?
谢谢
答案 0 :(得分:0)
GROUP BY期间的行为在各个数据库制造商之间是不同的。
Users.id是GROUP BY的一部分,而count()是聚合器,因此这些字段都可以。 Users.name可能是一个问题,因为系统可能无法确定该值是否唯一。在这种情况下,请执行“ MIN(Users.name)”这是一个返回单个值的函数。
答案 1 :(得分:0)
以下是包含以下内容的查询 您想要的table2内部联接table1 发件人,其中发送的邮件数主要在表t2中。
此外,您还要求发件人也必须具有配方,但是特定于每个发件人的邮件数应大于已收到的邮件数
Select t2.sender,
t2.count(*)
from table2 t2
inner join table1 t1 on
t2.sender=t1.uid and
t2.recipent=t1.uid where
t1.phone like '250%' group by
t2.sender having t2.sender IN
Select recipent from (Select
recipent, count(*) from table2
group by recipent
having count(*)<t2.count(*))
答案 2 :(得分:-1)
对于问题的第一部分,您可以使用此简单方法,并且效果很好 SELECT COUNT(*)人组 来自用户 像“ 250%”这样的电话;