【发布时间】:2017-08-11 16:29:58
【问题描述】:
我对 SQL 很陌生。我想要一个查询,它应该按某些列的最小值排序。以下是我想要的查询。
SELECT *
FROM (
SELECT p.PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
FROM PROJECT p
LEFT OUTER JOIN code c
ON p.PROJECT_ID= c.PROJECT_ID
WHERE p.PROJECT_NAME IN ('test')
ORDER BY min(c.LABEL) ASC
)
WHERE rownum <= 25;
为什么我需要这种方式。我有一张桌子 PROJECT。
PROJECT_ID PROJECT_NAME PROJECT_TYPE
1 a test1
2 b test2
我有另一个表代码,其中 project_id 作为外键。
ID PROJECT_ID LABEL
1 1 a
2 1 b
3 1 c
4 2 d
现在,当我将在 project_id 上加入它并在 code.label 上进行排序时,它将给我 4 条记录,其中项目 ID 为 1,项目 ID 为 1,项目 ID 为 2。但我的要求是根据代码标签对项目进行排序.所以逻辑上我想要两条记录。一个项目 id 1 与项目 id 1 的所有可能组合的标签的最小值,即标签 a 和其他项目 id 2。这就是为什么我想根据代码标签的最小值对其进行排序。我不能使用 group by,因为它会降低性能。
【问题讨论】:
-
要使用 MIN(它是一个聚合函数),您必须使用 GROUP BY 子句来对您的记录进行分组。
-
你的“rownum”列是从哪里来的?
-
我想你只是想要
ORDER BY c.LABEL? -
您应该显示一些示例数据和所需的输出。事实上,正如 Glenn 所说,只需按 c.LABEL 订购 似乎 就是您所需要的。
-
我不能只使用 order by 这样做会因为加入而给我重复的结果。