【问题标题】:How to do order by min() of some column?如何按某些列的 min() 排序?
【发布时间】: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 这样做会因为加入而给我重复的结果。

标签: sql oracle top-n


【解决方案1】:

用于使用 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  *
    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;

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2018-05-15
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2017-07-19
    相关资源
    最近更新 更多