在我的一个专栏中,有重复项,我只想抓住第一次出现。我怎样才能做到这一点?在示例中,我想获取col 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
答案 0 :(得分:3)
DISTINCT
关键字不适用于您的情况。
在DB中,行的顺序是任意的。但是,您可以使用可以使用字符串的聚合函数为每个唯一的C值选择一个B列。 MAX是一个这样的函数,如果字符串的“最大”是可接受的选择:
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)
答案 1 :(得分:2)
使用distinct()命令。
select distinct(colc), cola, colb from table
这只会选择唯一值
答案 2 :(得分:1)
使用LIMIT
,如果有多个这样的东西,你可以得到一个东西。此外,如果行完全相同,则根本无法区分它们,因此顺序无关紧要。
SELECT * FROM t WHERE colc=3 LIMIT 1
有时您需要一份重复行的报告:
SELECT colc, COUNT(*) AS cnt FROM t GROUP BY colc
GROUP BY子句查看您命名的字段(此处为:colc
),并将所有具有相同colc值的行视为相同。它会为每个colc
值生成堆,因此所有colc=1
都会转到一个堆上,colc=2
转到另一个堆上,依此类推。 COUNT()
聚合函数测量这些堆的高度。
HAVING
子句是在WHERE
之后应用的类GROUP BY
条件。我们可以使用它来选择唯一或重复的行,要求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
可以使用带有LIMIT
的{{1}}的MySQL扩展名删除所有重复行的副本:
DELETE
这将匹配所有DELETE FROM t WHERE colc=3 LIMIT 1
,但由于colc=3
而只会删除一行。