sql - MySQL - 使用 MIN 分组未按预期工作
问题描述
我有以下联合查询,我正在设置一个虚拟行号:
SELECT @row_num:=2 as row_num, id, name, admin1, admin3, admin4
FROM locations
WHERE feature_class IN ('P', 'A')
AND name LIKE 'cornwall%'
UNION ALL
SELECT @row_num:=1 as row_num, id, name, admin1, admin3, admin4
FROM locations
WHERE feature_class = 'L' AND feature_code = 'RGN'
AND name LIKE 'cornwall%'
这将返回以下结果:
row_num | id | name | admin1 | admin3 | admin4
-------------------------------------------------------------------------
2 | 2652355 | Cornwall | ENG | |
1 | 11609029 | Cornwall | ENG | |
现在,当我将此查询添加为子查询并使用 MIN 选择具有最低 row_num 的行时,我得到不正确的结果:
SELECT MIN(t0.row_num),
t0.id,
t0.name,
t4.name AS town_admin4,
t3.name AS county_admin3,
t1.name AS admin1
FROM (
SELECT @row_num:=2 as row_num, id, name, admin1, admin3, admin4
FROM locations
WHERE feature_class IN ('P', 'A')
AND name LIKE 'cornwall%'
UNION ALL
SELECT @row_num:=1 as row_num , id, name, admin1, admin3, admin4
FROM locations
WHERE feature_class = 'L' AND feature_code = 'RGN'
AND name LIKE 'cornwall%'
) t0
LEFT JOIN locations t1 ON t1.admin1 = t0.admin1 AND t1.feature_code = 'ADM1'
LEFT JOIN locations t3 ON t3.admin3 = t0.admin3 AND t3.feature_code = 'ADM3'
LEFT JOIN locations t4 ON t4.admin4 = t0.admin4 AND t4.feature_code = 'ADM4'
GROUP BY t0.name,
t4.name,
t3.name,
t1.name
ORDER BY t0.name
我得到以下结果:
MIN(t0.row_num) | id | name | town_admin4 | county_admin3 | admin1
--------------------------------------------------------------------------------------------
1 | 2652355 | Cornwall | | | England
如您所见,上述内容是不正确的。第 1 行应记录 id 为 11609029
为什么会这样 - 为什么 MIN 运算符没有按预期工作?
解决方案
推荐阅读
- python - Sqlalchemy:在关系表中具有额外列的自引用多对多关系
- ios - 是否可以检测到处于非运行状态的应用是通过后台模式启动的?
- kubernetes - 在 kubernetes statefulset 中为 pod 设置自定义序号,而不是默认的 0
- azure-devops-extensions - 作为自定义发布构建任务的一部分,我如何上传到 Repo
- python-3.x - 通过joblib在python中跨多个进程共享变量的问题
- c - 给定一个完全链接的 a.out,它定义了符号 foo,我如何知道该定义来自哪个目标文件,而不重新链接 a.out?
- c# - 我需要检查 API 调用是否在 90 秒内返回响应
- python - 扩展问题“Python logging multiple files using the same logger”
- java - 在 Java 8 中使用 Group By 和属性
- google-cloud-platform - 在 GCP 上停止和启动 VM 实例时导致数据丢失?