我想获取具有最小“顺序”列的每个类别(我的分组列)的数据集的 ID。
这里用一组数据来说明我的想法:
CREATE TABLE DATAS (
ID INT(2) ,
CATEGORY INT(2) ,
ORD INT(1)
);
INSERT INTO DATAS (ID, CATEGORY, ORD)
VALUES (1, 1, 3), (2, 1, 2), (3, 1, 1), (4, 2, 1), (5, 2, 2);
预期结果:
ID CATEGORY
-------------
3 1
4 2
奖金问题,即使“订单”列(ORD)有一些重复,如何只检索一个 ID?
INSERT INTO DATAS (ID, CATEGORY, ORD)
VALUES (1, 1, 3), (2, 1, 2), (3, 1, 1), (4, 2, 1), (5, 2, 1), (6, 3, NULL), (7, 3, NULL);
预期结果(例如使用 MIN 或其他建议):
ID CATEGORY
-------------
3 1
4 2
6 3
欢迎使用 Oracle 或 MySQL 查询,非常感谢。
Oracle解决这两个问题:
这两个问题的通用解决方案:
甲骨文 DDL/DML:
MySQL解决方案
我想我明白了!!!!
查询第一个答案:
查询第二个答案:
第二个答案有点困难,因为我必须找到一种方法将 NULL 替换为最小 ORD 值。我希望这就是你想用 NULL 做的事情。如果您查看子查询 BBB,它包含最小 ORD 值。我在带有子查询 AAA 的笛卡尔积中使用它作为替换 NULL ORD 值的方法。在那之后剩下的就变得容易了。
这是第一个查询运行的示例:
这是第二个查询的示例运行:
试试看 !!!
这是我的解决方案不如@Leigh 的优雅,但兼容 Oracle 和 MySQL ;)
我不喜欢我必须添加一个
GROUP BY
来过滤重复的事实......这将返回第一部分的答案:
第二部分的答案有点复杂。你可能只想要一个答案,但你想要哪个答案?最强ID?最少类别?主观。否则这可能会这样做: