MySQL:排除重复数据
在我的一个专栏中,有重复的,我只想抓住第一个。我该怎么做?在本例中,我希望获取C列中唯一的所有行。因此,我只希望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
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,*