【问题标题】:SQL, Group by one column with one distinct columnSQL,按一列与一列不同的列分组
【发布时间】:2019-02-11 14:19:15
【问题描述】:

我有一个结构如下的表

id  phone_number  message    schedule_id
1 | 1212121212  | aaaaa |    12
2 | 2323232323  | bbbbb |    12
3 | 1212121212  | ccccc |    12
4 | 1212121212  | ddddd |    13

我想获取具有相同 phone_number 和不同 schedule_id 的行 我使用以下查询来获取具有相同电话号码的行

select * from message group by to_number having count(*)>1;

但它也将具有不同 schedule_id 的行分组

谁能帮我写查询?

【问题讨论】:

  • 你的预期输出是什么
  • 您使用的是哪个 MySQL 版本?
  • @ErayBalkanli 我使用答案中的查询得到它
  • 一行怎么会有一个“不同的 schedule_id”?每行只有一个 schedule_id。
  • 从不。我的意思是具有不同 schedule_id 的相同电话号码。相同的电话号码可能会有不同的时间表

标签: mysql sql group-by distinct


【解决方案1】:

你可以使用EXISTS:

select m.*
from message m
where exists (select 1 from message m1 where m1.to_number = m.to_number and m1.id <> m.id);

您也可以使用GROUP BY,也可以包含该列:

select to_number, schedule_id 
from message 
group by to_number, schedule_id 
having count(*) > 1;

【讨论】:

  • 谢谢兄弟。明白了
  • @草莓。 . .那是错字。
【解决方案2】:

您应该为 subqselect 与 count group by phone_number 使用联接

  select m.* 
  from  message m
  inner join (
        select phone_number
        from message 
        group by phone_number
        having count(*)>1;

  ) t on t.phone_number  = m.phone_number

【讨论】:

  • 按电话号码分组
【解决方案3】:

这是你所期待的吗?

select distinct phone_number, schedule_id from message;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多