sql - 优先选择列值的 SQL 选择
问题描述
我是 SQL 新手,我想问一下如何根据偏好和分组选择条目。
+----------+----------+------+
| ENTRY_ID | ROUTE_ID | TYPE |
+----------+----------+------+
| 1 | 15 | 0 |
| 1 | 26 | 1 |
| 1 | 39 | 1 |
| 2 | 22 | 1 |
| 2 | 15 | 1 |
| 3 | 30 | 1 |
| 3 | 35 | 0 |
| 3 | 40 | 1 |
+----------+----------+------+
对于上表,我想为每个条目选择 1 个条目,ENTRY_ID
并为返回的以下首选项ROUTE_ID
:
- IF TYPE = 0 可用于任何具有相同 的条目,返回所有具有相同的条目
ENTRY_ID
的最小值ROUTE_ID
TYPE = 0
- 如果
ENTRY_ID
只有相同TYPE = 1
的可用,则返回最小值ROUTE_ID
查询的预期结果如下:
+----------+----------+------+
| ENTRY_ID | ROUTE_ID | TYPE |
+----------+----------+------+
| 1 | 15 | 0 |
| 2 | 15 | 1 |
| 3 | 35 | 0 |
+----------+----------+------+
谢谢您的帮助!
解决方案
您可以同时按TYPE
and进行分组ENTRY_ID
,然后使用该HAVING
子句过滤掉那些TYPE
不是该记录的最小值的。
SELECT ENTRY_ID, MIN(ROUTE_ID), TYPE
FROM MyTable
GROUP BY ENTRY_ID, TYPE
HAVING TYPE = (SELECT MIN(s.TYPE) FROM MyTable s WHERE s.ENTRY_ID = MyTable.ENTRY_ID)
这依赖于类型只能是 0 或 1。如果有更多可能的值,它将只返回最低的类型。
推荐阅读
- spring - 使用 Spring Cloud 函数 AWS Adapter 运行 AWS lambda 函数时,spring 不会注入(自动装配)组件 bean
- android - 在 Android 应用程序中重复请求的问题
- django - 为什么 truncatechars 不能正常工作?
- spring - Spring WebFlux:WebClient + 错误后备
- c# - 使用 WSDualHttpBinding 在 WCF 服务之间共享 Windows 标识
- java - docx4j 无法正确渲染边距
- c++ - 如果未在 main 中输入隔离,则 V8 异常
- c# - 继承属性的 EntityState 保持不变
- php - PHP 会话登录控制器
- python - 将嵌套字典转换为元组列表