mysql - sql join 中的 order by

标签 mysql sql

我有一个 sql 查询,它返回的正是我需要的数据。但是,我在排序依据方面遇到了麻烦。我想我可能需要某种嵌套选择或分组依据,但我从未做过其中之一,所以我想知道是否有人可以提供帮助。数据需要首先按center_id排序,然后按learner_name排序,然后按journey_centre_start排序,但它似乎只按center_id和learner_name排序,而忽略了journey_centre_start的排序。

Journey_centre_start 是数据库中默认值为 NULL 的日期类型。

SELECT a.learner_id
     , a.learner_name
     , a.centre_id
     , a.learner_status
     , b.journey_id
     , c.journey_centre_start
  FROM learner a
  JOIN learner_journey b  
    ON a.learner_id = b.learner_id
  JOIN journey c 
    ON b.journey_id = c.journey_id
 WHERE a.centre_id != 999
   AND a.learner_status = 'complete'
 ORDER 
    BY a.centre_id ASC 
     , a.learner_name ASC 
     , c.journey_centre_start ASC;

最佳答案

如果您希望旅程_中心_开始中的 NULL 值位于列表底部,那么您可以在排序中添加 CASE 语句`

  SELECT a.learner_id
 , a.learner_name
 , a.centre_id
 , a.learner_status
 , b.journey_id
 , c.journey_centre_start
  FROM learner a
 JOIN learner_journey b  
  ON a.learner_id = b.learner_id
 JOIN journey c 
  ON b.journey_id = c.journey_id
 WHERE a.centre_id != 999
 AND a.learner_status = 'complete'
 ORDER 
 BY a.centre_id ASC 
 , a.learner_name ASC 
 , CASE WHEN c.journey_centre_start IS NULL THEN 2 ELSE 1 END
 , c.journey_centre_start ASC

关于mysql - sql join 中的 order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017561/

相关文章:

mysql - MySQL新手,我得到了我想要的相反结果

sql - 基于数据中的日期的多日变化不连续

SQL Server 多个表的外键

mysql - PHPMyAdmin 配置由于 MySQL 用户密码而不起作用?

mysql - Rails + Ubuntu + MySQL = 错误

php - 为什么我会收到 SQL 语法错误?

mysql - Zabbix Admin用户更改为标准用户

MySQL While循环抛出错误

java - java.sql.Timestamp 可以处理的最大年份是多少?

sql - 对 SQL Server 2005 结果进行分页