2017-08-10 51 views
2

我對SQL很新穎。我想要一個查詢,它應該按某個列的最小值進行排序。以下是我想要的查詢。如何按某列的min()進行排序?

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_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和1項目ID爲2。但我的要求是基於項目排序在代碼標籤上。所以在邏輯上我想要兩個記錄。一個用於項目ID爲1的項目ID爲1的所有可能組合的標籤的最小值,即標籤爲a,其他爲項目ID爲2.因此,這就是爲什麼我想基於最小代碼標籤對其進行排序。我無法使用group by,因爲它會降低性能。

+0

使用MIN (它是一個聚合函數),您必須使用GROUP BY子句來對記錄進行分組。 –

+0

你的「rownum」專欄來自哪裏? –

+0

我想你只是想'ORDER BY c.LABEL'? – Glenn

回答

0

使用的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; 
相關問題