mysql数据去重和排序

mysql中的字母默认不区分大小写。

 

比如:

mysql> select * from (select 'a' col1 union select 'A' union select 'B'  union s

elect 'b') a order by col1 ;

+------+

| col1 |

+------+

| a    |

| B    |

+------+

2 rows in set (0.00 sec)

使用union进行去重操作,A和a看成相同数据,order by时按照字典顺序进行排序。

 

mysql> select * from (select 'a' col1 union all select 'A' union all select 'B'

 union all select 'b') a order by col1 ;

+------+

| col1 |

+------+

| a    |

| A    |

| B    |

| b    |

+------+

4 rows in set (0.00 sec)

 

 

可以通过binary关键字指定其按照二进制顺序排序:

mysql> select * from (select 'a' col1 union select 'A' union select 'B'  union s

elect 'b') a order by binary col1 ;

+------+

| col1 |

+------+

| B    |

| a    |

+------+

2 rows in set (0.05 sec)

 

 

mysql> select * from (select 'a' col1 union all select 'A' union all select 'B'

 union all select 'b') a order by binary col1 ;

+------+

| col1 |

+------+

| A    |

| B    |

| a    |

| b    |

+------+

4 rows in set (0.00 sec)

 

 

如果实际的数据是

A

a

a

B

b

 

想要得到结果

A

a

B

b

语句为:

SELECT DISTINCT col1,ASCII(col1) desc_1,ASCII(UPPER(col1)) desc_2 FROM

(SELECT 'a' as col1

union ALL

SELECT 'A' as col1

union ALL

SELECT 'a' as col1

union ALL

SELECT 'b' as col1

union ALL

SELECT 'B' as col1) a

ORDER BY desc_2,desc_1

 

以上是通过语句进行限制的,如果经常进行类似的查询(区分大小写),需要在建表时指定字段属性,如:

mysql> CREATE TABLE T( A VARCHAR(10) BINARY );

Query OK, 0 rows affected (0.36 sec)

 

mysql> insert into t values ('A');insert into t values ('a');insert into t values ('a');insert into t values ('B');insert into t values ('b');

Query OK, 1 row affected (0.11 sec)

 

Query OK, 1 row affected (0.15 sec)

 

Query OK, 1 row affected (0.17 sec)

 

Query OK, 1 row affected (0.04 sec)

 

Query OK, 1 row affected (0.04 sec)

 

mysql> select distinct a from t;

+------+

| a    |

+------+

| A    |

| a    |

| B    |

| b    |

+------+

4 rows in set (0.00 sec)

 

mysql> select distinct a from t order by a;

+------+

| a    |

+------+

| A    |

| B    |

| a    |

| b    |

+------+

4 rows in set (0.00 sec)

 

mysql> select distinct a from t order by binary a;

+------+

| a    |

+------+

| A    |

| B    |

| a    |

| b    |

+------+

4 rows in set (0.00 sec)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-1815030/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26451536/viewspace-1815030/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到了三种方法来实现MySQL分组去重,包括子查询方式、使用IN和MAX函数方式以及复杂函数方式。其中,子查询方式是一种常见的解决方法,通过在子查询中使用GROUP BY和ORDER BY语句来去重。然而,这种方法存在一个问题,就是子查询中的ORDER BY语句可能会被MySQL优化掉,导致查询结果不是最近的浏览记录。\[2\]为了解决这个问题,可以使用子查询方式,并在子查询中使用ROW_NUMBER()函数来给每条记录添加一个行号,然后根据行号进行排序,以确保获取到最近的浏览记录。\[3\]这种方法可以在SELECT语句中使用ROW_NUMBER()函数和OVER()子句来实现分组去重。 #### 引用[.reference_title] - *1* *2* [mysql 利用group by和order by根据指定条件分组去重三种方法优劣比较](https://blog.csdn.net/qq_45605562/article/details/119217156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql 数据去重的三种方式[实战]](https://blog.csdn.net/m0_55070913/article/details/126113153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值