MySQL:排除重复数据

MySQL:排除重复数据,mysql,Mysql,在我的一个专栏中,有重复的,我只想抓住第一个。我该怎么做?在本例中,我希望获取C列中唯一的所有行。因此,我只希望hello ladies、hello team、hello cats和hello sexy Example Table --------------- column A | col B | col C -------------------------- hello | ladies| 1 hello | guys | 1 hello | team | 2 h

在我的一个专栏中,有重复的,我只想抓住第一个。我该怎么做?在本例中,我希望获取C列中唯一的所有行。因此,我只希望
hello ladies
hello team
hello cats
hello sexy

Example Table
---------------

column A | col B | col C 
--------------------------
hello    | ladies| 1
hello    | guys  | 1
hello    | team  | 2
hello    | dogs  | 2
hello    | cats  | 3
hello    | cats  | 3
hello    | sexy  | 4
使用distinct()命令

这将仅使用distinct()命令选择唯一值

这将仅选择唯一值

关键字不适用于您的情况

在数据库中,行的顺序是任意的。但是,您可以使用可以处理字符串的聚合函数,为每个唯一的C值选择B列中的一个。如果字符串的“最大值”是可接受的选择,则为该函数:

mysql> select A,max(B),C from Test group by C,A;
+-------+--------+------+
| A     | max(B) | C    |
+-------+--------+------+
| hello | ladies |    1 |
| hello | team   |    2 |
| hello | cats   |    3 |
| hello | sexy   |    4 |
+-------+--------+------+
4 rows in set (0.00 sec)
关键字不适用于您的情况

在数据库中,行的顺序是任意的。但是,您可以使用可以处理字符串的聚合函数,为每个唯一的C值选择B列中的一个。如果字符串的“最大值”是可接受的选择,则为该函数:

mysql> select A,max(B),C from Test group by C,A;
+-------+--------+------+
| A     | max(B) | C    |
+-------+--------+------+
| hello | ladies |    1 |
| hello | team   |    2 |
| hello | cats   |    3 |
| hello | sexy   |    4 |
+-------+--------+------+
4 rows in set (0.00 sec)

使用
LIMIT
你可以只得到其中一个,如果这个东西有多个。此外,如果行完全相同,则根本无法区分它们,所以顺序无关紧要

SELECT * FROM t WHERE colc=3 LIMIT 1
有时您需要重复行的报告:

SELECT colc, COUNT(*) AS cnt FROM t GROUP BY colc
GROUPBY子句查看您命名的字段(此处:
colc
),并认为具有相同colc值的所有行都相同。它为每个
colc
值生成堆,因此所有
colc=1
都进入一个堆,
colc=2
进入另一个堆,依此类推。
COUNT()
aggregate函数测量这些堆的高度

HAVING
子句是在
groupby
之后应用的类似于
的条件。我们可以使用它来选择唯一或重复的行,要求
cnt
为1或大于1:

-- list all unique rows
SELECT colc, COUNT(*) AS cnt FROM t GROUP BY colc HAVING cnt = 1
您可以使堆的实际内容可见:

SELECT colc, COUNT(*) as cnt, GROUP_CONCAT(colb) AS content FROM t GROUP BY colc HAVING cnt > 1
可以使用MySQL扩展名
LIMIT
delete
,删除除一个副本以外的所有重复行:

DELETE FROM t WHERE colc=3 LIMIT 1

这将匹配所有
colc=3
,但由于
限制

限制
的关系,只会删除一行,如果此项有多个限制,则只能获取其中一项。此外,如果行完全相同,则根本无法区分它们,所以顺序无关紧要

SELECT * FROM t WHERE colc=3 LIMIT 1
有时您需要重复行的报告:

SELECT colc, COUNT(*) AS cnt FROM t GROUP BY colc
GROUPBY子句查看您命名的字段(此处:
colc
),并认为具有相同colc值的所有行都相同。它为每个
colc
值生成堆,因此所有
colc=1
都进入一个堆,
colc=2
进入另一个堆,依此类推。
COUNT()
aggregate函数测量这些堆的高度

HAVING
子句是在
groupby
之后应用的类似于
的条件。我们可以使用它来选择唯一或重复的行,要求
cnt
为1或大于1:

-- list all unique rows
SELECT colc, COUNT(*) AS cnt FROM t GROUP BY colc HAVING cnt = 1
您可以使堆的实际内容可见:

SELECT colc, COUNT(*) as cnt, GROUP_CONCAT(colb) AS content FROM t GROUP BY colc HAVING cnt > 1
可以使用MySQL扩展名
LIMIT
delete
,删除除一个副本以外的所有重复行:

DELETE FROM t WHERE colc=3 LIMIT 1

这将匹配所有
colc=3
,但由于
限制将只删除一行

等等,如果我想选择所有列,这将如何工作?这不是意味着我必须把每一个都打印出来,而不是使用
*
?我试着这样做:
selectdistinct col C,*FROM table
Wait,如果我想选择所有列,这将如何工作?这不是意味着我必须把每一个都打印出来,而不是使用
*
?我试过这样做:
从表中选择不同的列C,*