我有一个 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/