2010-09-25 33 views
4

我的理解是GREATEST()和LEAST()不是SQL標準的一部分,但是很常見。SQL標準中最高和最低標準

我在想,有沒有辦法克隆GREATEST的功能保持在SQL標準內?

SELECT id, GREATEST(1,2,3,4,5,6,7) AS number FROM table 

完全查詢:

SELECT SUBSTR(section,1,2) AS campus, 
      AVG(GREATEST(maximum - enrolled, 0)) AS empty 
    FROM sectionrun 
    WHERE coursenumber = '105' AND subject = 'ENGL' 
GROUP BY campus 
+2

什麼數據庫? GREATEST&LEAST由[PostgreSQL](http://www.postgresql.org/docs/8.1/interactive/functions-conditional.html),[MySQL](http://dev.mysql.com/doc/refman /4.1/en/comparison-operators.html#function_greatest),[Oracle](http://techonthenet.com/oracle/functions/greatest.php)。 SQL Server是唯一不支持GREATEST/LEAST的專業。 – 2010-09-25 17:58:40

+1

我知道PostgreSQL和MySQL支持GREATEST/LEAST。我的問題涉及實際的SQL標準http://en.wikipedia.org/wiki/SQL#Standardization – WalterJ89 2010-09-25 22:35:51

+0

另請參閱:http://stackoverflow.com/questions/71022/sql-max-of-multiple-columns – 2012-05-23 12:07:02

回答

3

可以使用CASE表達:

SELECT SUBSTR(section,1,2) AS campus, 
      AVG(CASE WHEN maximum - enrolled > 0 
        THEN maximum - enrolled 
        ELSE 0 
       END) AS empty 
    FROM sectionrun 
    WHERE coursenumber = '105' AND subject = 'ENGL' 
GROUP BY campus 
+0

Awsome,謝謝。 – WalterJ89 2010-09-25 16:14:18

+3

這不會很好地擴展到兩個以上的值。這對於OP的具體例子來說很好,但並沒有回答更一般的問題。 – 2012-04-24 08:49:31

2
GREATEST(1,2,3,4,5,6,7) AS number 

可以成爲

(select max(tmp) from (
     select 1 tmp from dual 
     union all 
     select 2 tmp from dual 
     union all 
     select 3 tmp from dual 
     union all 
     select 4 tmp from dual 
     union all 
     select 5 tmp from dual 
     union all 
     select 6 tmp from dual 
     union all 
     select 7 tmp from dual 
)) AS number