如何按某列的 min() 排序?
How to do order by min() of some column?
我是 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;
为什么我需要这样。我有一个 table 项目。
PROJECT_ID PROJECT_NAME PROJECT_TYPE
1 a test1
2 b test2
我有另一个 table 代码,其中 project_id 作为外键。
ID PROJECT_ID LABEL
1 1 a
2 1 b
3 1 c
4 2 d
现在,当我在 project_id 加入它并在 code.label 下订单时,它将给我 4 条记录,其中 3 条项目 ID 为 1,1 条记录为项目 ID 2。但我的要求是根据代码标签对项目进行排序。所以逻辑上我想要两条记录。一个用于项目 ID 1,项目 ID 1 的所有可能组合的标签最小值,即标签 a 和另一个项目 ID 2。这就是为什么我想根据代码标签的最小值对其进行排序。我不能使用 group by,因为它会降低性能。
使用 MIN( )
您需要一个群组,例如:
SELECT *
FROM (
SELECT p.PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
FROM PROJECT p
LEFT OUTER JOIN code c
ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
GROUP BY .PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
ORDER BY min(c.LABEL) ASC
)
WHERE rownum <= 25;
并且在某些数据库中,您必须 select 您需要的列,例如:
SELECT *
FROM (
SELECT p.PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE,
min(c.LABEL)
FROM PROJECT p
LEFT OUTER JOIN code c
ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
GROUP BY .PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
ORDER BY min(c.LABEL) ASC
)
WHERE rownum <= 25;
我是 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;
为什么我需要这样。我有一个 table 项目。
PROJECT_ID PROJECT_NAME PROJECT_TYPE
1 a test1
2 b test2
我有另一个 table 代码,其中 project_id 作为外键。
ID PROJECT_ID LABEL
1 1 a
2 1 b
3 1 c
4 2 d
现在,当我在 project_id 加入它并在 code.label 下订单时,它将给我 4 条记录,其中 3 条项目 ID 为 1,1 条记录为项目 ID 2。但我的要求是根据代码标签对项目进行排序。所以逻辑上我想要两条记录。一个用于项目 ID 1,项目 ID 1 的所有可能组合的标签最小值,即标签 a 和另一个项目 ID 2。这就是为什么我想根据代码标签的最小值对其进行排序。我不能使用 group by,因为它会降低性能。
使用 MIN( ) 您需要一个群组,例如:
SELECT *
FROM (
SELECT p.PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
FROM PROJECT p
LEFT OUTER JOIN code c
ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
GROUP BY .PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
ORDER BY min(c.LABEL) ASC
)
WHERE rownum <= 25;
并且在某些数据库中,您必须 select 您需要的列,例如:
SELECT *
FROM (
SELECT p.PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE,
min(c.LABEL)
FROM PROJECT p
LEFT OUTER JOIN code c
ON p.codeId=c.ID
WHERE p.PROJECT_NAME IN ('test')
GROUP BY .PROJECT_ID,
p.PROJECT_NAME,
p.PROJECT_TYPE
ORDER BY min(c.LABEL) ASC
)
WHERE rownum <= 25;