DISTINCT 用来去除重复的记录行。看下面一个表:
上表中,几个用户使用了相同的 IP,如果我们不想列出相同的 IP,那么可以:
[Plain Text] 纯文本查看 复制代码 SELECT DISTINCT(`regip`) FROM `UserIP`;
如果要统计这些不同的 IP 的行数,可以使用下面的命令:
[Plain Text] 纯文本查看 复制代码 mysql> SELECT COUNT(DISTINCT(`regip`)) AS '不同IP总数' FROM `UserIP`;
上面的两个表中,只有 regip 字段是有重复记录的(username 并不重复),因此使用 DISTINCT 单独作用在 regip 字段时是可以过滤重复的,但是如果在 SELECT 中增加 username 字段查询时,DISTINCT 就会失效,比如:
这是因为虽然相同的 IP 对应着不同的用户名,如果将重复的 IP 去掉,那么也势必去掉相应的用户名,那么到底是应该去掉哪个用户名呢? SQL 查询引擎是没法指定的,因此只能全部输出来。当然了,如果表中有完全的记录信息:
那么执行下面的语句,也将过滤掉重复的查询结果:
[Plain Text] 纯文本查看 复制代码 SELECT DISTINCT username, regip FROM `UserIP`;
|