>데이터 베이스 >MySQL 튜토리얼 >MySQL의 잘 알려지지 않은 정렬 방법

MySQL의 잘 알려지지 않은 정렬 방법

coldplay.xixi
coldplay.xixi앞으로
2021-02-09 10:01:202668검색

<img .php.cn alt="MySQL의 잘 알려지지 않은 정렬 방법" ></img.php.cn><img src="https://img.php.cn/upload/article/202102/09/2021020910000799574.jpg" alt="MySQL의 잘 알려지지 않은 정렬 방법" >

免费学习推荐:mysql视频教程

ORDER BY 字段名 升序/降序,相信进来的朋友都认识这个排序语句,但遇到一些特殊的排序,单单使用字段名就无法满足需求了,下面给大家介绍几个我遇到过的排序方法:

一、准备工作

为了更好演示与理解,先准备一张学生表,加入编号、姓名、成绩三个字段,插入几条数据,如图:
MySQL의 잘 알려지지 않은 정렬 방법

二、条件排序

需求一:成绩从高到低进行排序

街边卖菜的阿姨都能敲,直接使用 ORDER BY examScore DESC 轻松完成了(如下左图)。

需求二:成绩从高到低进行排序,并且没录入成绩的排在最前面

客户体验最重要,为了方便二次录入成绩,提出这样的需求纯属正常。要实现该排序,上面的语句是无法实现的,因此就需要用到条件排序,先判断成绩为空赋个最大值,再进行排序,如 ORDER BY IF(examScore IS NULL,101,examScore) DESC 也能轻松实现(如下右图)。

需求 需求一 需求二
语句 ORDER BY examScore DESC ORDER BY IF(examScore IS NULL,101,examScore) DESC



效果 MySQL의 잘 알려지지 않은 정렬 방법 MySQL의 잘 알려지지 않은 정렬 방법

三、自定义排序

客户如上帝,需求花里胡哨也屡见不鲜,就比如,要求张三李四排在最前面,其他学生按照成绩从高到低进行排序。这种情况就需要使用自定义排序了,MySQL 自带的 FIELD 函数(返回对应字符串的索引)可帮您实现。

语句一:
ORDER BY FIELD(studentName,‘张三’,‘李四’) ASC, examScore DESC;

上面语句运行结果却把张三李四排到最后了(如下左图),顺理成章的,要把张三李四编排到最前面就进行降序排序。

语句二:
ORDER BY FIELD(studentName,‘李四’,‘张三’) DESC, examScore DESC;

结果果然正中下怀(如下右图)。

语句 语句一 语句二
效果 MySQL의 잘 알려지지 않은 정렬 방법 MySQL의 잘 알려지지 않은 정렬 방법

后来发现 FIND_IN_SET 函数也能实现,而且使用100万条数据测试,FIND_IN_SET 性能更优。

ORDER BY FIND_IN_SET(studentName,‘李四,张三’) DESC, examScore DESC;

四、汉字拼音首字母排序

有些朋友就奇怪了,汉字排序直接使用普通的 ORDER BY 字段 ASC 轻松完事啦,为什么说鲜为人知呢。
其实,用户创建表字段使用 GBK 字符集时,直接使用ORDER BY 字段 ASC

무료 학습 추천: mysql 동영상 튜토리얼 ORDER BY 필드 이름 오름차순/내림차순, 들어오는 친구들은 이 정렬 문을 알고 있다고 생각하지만, 특별한 정렬을 접할 때 필드 이름만으로는 요구 사항을 충족할 수 없습니다. 다음은 내가 접한 몇 가지 정렬 방법을 소개합니다. 1. 준비
요구 사항 1: 높은 점수에서 낮은 점수로 정렬
길거리에서 야채를 파는 아줌마도 할 수 있습니다. ORDER BY ExamScore를 사용하세요. DESC 쉽게 완료되었습니다(아래 왼쪽 그림).
요건 2: 점수는 높은 것부터 낮은 것 순으로 정렬되며, 점수가 없는 것이 1순위입니다.
더 나은 시연과 이해를 위해 먼저 학생 테이블을 준비하고 번호, 이름, 학년 세 필드를 추가하고 삽입합니다. 그림과 같은 몇 가지 필드 데이터:
MySQL의 잘 알려지지 않은 정렬 방법
2. 조건부 정렬MySQL의 잘 알려지지 않은 정렬 방법
2차 점수 입력을 원활하게 하기 위해서는 고객 경험이 가장 중요합니다. 그런 요청을 해보세요. 이 정렬을 하려면 위의 문장을 구현할 수 없으므로 조건부 정렬을 사용해야 합니다. 먼저 점수가 비어 있는지 확인하고 최대값을 할당한 다음 ORDER BY IF(examScore IS NULL, 101,examScore ) DESC도 쉽게 구현할 수 있습니다(아래 오른쪽 참조).

    요구 사항
  • 요구 사항 1
  • 요구 사항 2

StatementORDER BY ExamScore DESCORDER BY IF(examScore IS NULL,101,examScore) DESC


🎜
🎜🎜
🎜🎜🎜🎜Effect🎜🎜여기에 이미지 설명 삽입🎜🎜여기에 이미지 설명 삽입 🎜🎜🎜🎜🎜🎜3. 맞춤 정렬🎜🎜🎜고객은 신과 같아서 화려한 요구 사항을 갖는 경우가 많습니다. 예를 들어 학생이 1등을 해야 하고, 다른 학생들은 높은 순위에서 높은 순위로 정렬됩니다. 점수에 따라 낮습니다. 이 경우 사용자 정의 정렬을 사용해야 합니다. MySQL의 자체 FIELD 함수(해당 문자열의 인덱스를 반환)를 사용하면 이를 달성하는 데 도움이 될 수 있습니다. 🎜🎜🎜명령문 1:
ORDER BY FIELD(studentName,'Zhang San','Li Si') ASC, ExamScore DESC;🎜🎜🎜위 명령문의 결과는 Zhang San과 Li Si가 마지막 순위입니다. (왼쪽 그림과 같이) , Zhang, San, Li Si를 맨 앞으로 정렬하려면 내림차순으로 정렬하는 것이 논리적입니다. 🎜🎜🎜명령문 2:
ORDER BY FIELD(studentName,'lee思','张三') DESC, ExamScore DESC;🎜🎜🎜결과는 정확히 제가 원했던 것이었습니다(아래 오른쪽 참조). 🎜🎜🎜🎜🎜문🎜🎜문 1🎜🎜문 2🎜🎜🎜🎜🎜🎜Effect🎜🎜여기에 이미지 설명 삽입🎜🎜여기에 그림 설명 삽입🎜🎜🎜🎜🎜 나중에 FIND_IN_SET 함수도 구현할 수 있다는 것을 알았고, 1백만 개의 데이터를 테스트하여 FIND_IN_SET의 성능이 더 좋았습니다. 🎜🎜🎜ORDER BY FIND_IN_SET(studentName,'lee思,张三') DESC, ExamScore DESC;🎜🎜🎜🎜4. 중국어 병음의 첫 글자로 정렬🎜🎜🎜한자를 정렬하는 데 놀란 친구들도 있습니다. 일반 ORDER BY field ASC 쉽게 할 수 있는데 왜 이렇게 잘 알려지지 않았나요?
실제로 사용자가 GBK 문자 집합을 사용하여 테이블 필드를 생성할 때 문자 왜곡을 방지하기 위해 ORDER BY field ASC를 직접 사용할 수 있습니다. 일부 사용자는 utf8을 사용합니다. 문자 집합 및 단순 정렬 ​​문은 아무 작업도 수행할 수 없으므로(아래 왼쪽 그림 참조) 정렬 시 필드를 GBK로 변환해도 괜찮습니다(아래 오른쪽 그림 참조). 🎜🎜🎜🎜🎜Statement🎜🎜ORDER BY StudentName ASC🎜🎜ORDER BY CONVERT(studentName USING GBK) ASC🎜🎜🎜🎜🎜🎜Effect🎜🎜🎜🎜🎜🎜🎜 🎜 🎜🎜🎜🎜5. 좋아하실 것 같아요 🎜🎜🎜 🎜MySQL 원격 연결 오류 1130 해결 방법🎜🎜MySQL 구성 마스터-슬레이브 동기화 백업🎜🎜필터를 사용하여 SQL 주입 방지🎜🎜🎜🎜🎜관련 무료 학습 권장 사항: 🎜🎜🎜mysql 데이터베이스🎜🎜🎜(동영상)🎜🎜🎜

위 내용은 MySQL의 잘 알려지지 않은 정렬 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제