如何按某列的 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;