You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何对查询结果行按字母顺序排序并调整字段展示顺序

实现方案

你可以通过LEAST、GREATEST函数自动调整每行两个名称的先后顺序,再配合排序规则实现需求,修改后的查询语句如下:

SELECT DISTINCT
    LEAST(re1.name, re2.name) AS name1,
    GREATEST(re1.name, re2.name) AS name2
FROM Rating ra1 
JOIN Reviewer re1 ON re1.rID = ra1.rID
CROSS JOIN Rating ra2
JOIN Reviewer re2 ON re2.rID = ra2.rID
WHERE ra1.mID = ra2.mID
AND re1.rID != re2.rID
ORDER BY name1, name2;

逻辑说明

  • LEAST(re1.name, re2.name)会自动取两个名字中字典序更小的放在第一个位置,GREATEST(re1.name, re2.name)会取字典序更大的放在第二个位置,自动完成每行内部的顺序调整,不需要手动交换值
  • 移除了原查询中re1.rID > re2.rID的条件,因为函数已经统一了配对顺序,配合DISTINCT可以自动去除重复的逆序配对
  • 最终的ORDER BY name1, name2会让整个结果集先按第一个名字升序排序,第一个名字相同时再按第二个名字升序排序,符合整体按字母顺序排序的要求

如果需要更好的兼容性,也可以用CASE WHEN实现相同效果:

SELECT DISTINCT
    CASE WHEN re1.name < re2.name THEN re1.name ELSE re2.name END AS name1,
    CASE WHEN re1.name < re2.name THEN re2.name ELSE re1.name END AS name2
FROM Rating ra1 
JOIN Reviewer re1 ON re1.rID = ra1.rID
CROSS JOIN Rating ra2
JOIN Reviewer re2 ON re2.rID = ra2.rID
WHERE ra1.mID = ra2.mID
AND re1.rID != re2.rID
ORDER BY name1, name2;

内容的提问来源于stack exchange,提问作者goldenfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:18:02