如何合并表格并编辑某些结果?

时间:2019-05-06 18:07:49

标签: 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,
PRIMARY KEY (recipient, sender, time)
);

我如何查找用户使用例如250开头的电话发送了多少条消息? 以及如何查找发送的邮件多于收到的用户的名称?

谢谢

3 个答案:

答案 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%”这样的电话;