MySQL - 提取具有不重复的某列的行

时间:2017-09-28 18:38:22

标签: mysql group-by

假设我有一个以这种方式构建的表格:

Column1   Column2    Column3
   a        E           f
   b        E           g
   c        r           h
   d        E           i

我想获得两行:

 a    E    f
 c    r    h

因为我不想占用Column2值重复的行,特别是我不关心要重复哪一行,所以第一行适合

我认为执行此查询会有效,但事实并非如此:

select * from db group by Column2 having column2 != '' 

因为我获得完全相同的行

这是真实的例子

Tabe: mydb
Columns:
id  int(11) AI PK
client  varchar(45)
birth   datetime
email   varchar(45)
phone   varchar(45)


 id   client        birth                email           phone
'1', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '57576765767'
'2', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '45646456546'
'3', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '35435353553'
'4', 'test', '2017-08-12 00:00:00', 'test1@r.com',   '12313212313'
'5', 'test', '2017-08-12 00:00:00', 'test4@r.com',   '23424234234'

查询:     通过电子邮件选择* mydb组

结果:与之前相同

2 个答案:

答案 0 :(得分:0)

SELECT DISTINCT Column2, Column1, Column3
FROM db
GROUP BY Column2

可能会这样做

- 编辑 -

忘了GROUP BY

---编辑2 ---

create table mydb (id  int(11) Primary key AUTO_increment,
  client  varchar(45),
  birth   datetime,
  email   varchar(45),
  phone   varchar(45));

INSERT INTO mydb VALUES
    ('1', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '57576765767'),
    ('2', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '45646456546'),
    ('3', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '35435353553'),
    ('4', 'test', '2017-08-12 00:00:00', 'test1@r.com',   '12313212313'),
    ('5', 'test', '2017-08-12 00:00:00', 'test4@r.com',   '23424234234');

SELECT DISTINCT email, client, birth, phone
FROM mydb
GROUP BY email;

# email, client, birth, phone
aaa@gmail.com, test, 2017-08-12 00:00:00, 57576765767
test1@r.com, test, 2017-08-12 00:00:00, 12313212313
test4@r.com, test, 2017-08-12 00:00:00, 23424234234

答案 1 :(得分:0)

试试这个:

这将仅使用组中具有最小ID的值来获取与不同电子邮件匹配的数据。如果您想要最大ID,可以将最小值更改为最大值。

注意:id应该是唯一的

<强>查询

select * from mydb where id IN( select min(id) from mydb group by email )