如何在MySQL中获取最长/最短客户名并合并排序?
修正后的MySQL查询语句及说明
你的原SQL存在几个核心问题:
- 第一个查询仅返回名称的长度数值,而非对应的客户名称;且两个独立的
SELECT语句无法互相引用别名。 - 使用
concat()会将两个名称拼接成一个字符串,但你需要的是两条独立的记录。 - 第二个查询从
orders表调用不存在的longest和lowest字段,会直接触发语法错误。
以下是满足需求的正确SQL:
SELECT customer_id AS diff FROM orders WHERE LENGTH(customer_id) = (SELECT MAX(LENGTH(customer_id)) FROM orders) OR LENGTH(customer_id) = (SELECT MIN(LENGTH(customer_id)) FROM orders) ORDER BY LENGTH(customer_id) DESC;
逻辑说明:
- 两个子查询分别获取
orders表中客户名的最长和最短长度。 WHERE条件筛选出长度等于最长或最短值的客户记录。ORDER BY按名称长度降序排列,确保最长名称排在前面。
执行后会得到你期望的结果:
| diff |
|---|
| Nathaniel |
| John |
内容的提问来源于stack exchange,提问作者Klein
相关产品推荐
相关产品推荐

