標籤:http 使用 資料 ar 問題 代碼 時間 sql
當需要瞭解一列中的最大值時,可以使用MAX()函數;同樣,當需要瞭解一列中的最小值時,可以使用MIN()函數。文法如下。
SELECT MAX (column_name) / MIN (column_name)
FROM table_name
說明:列column_name中的資料可以是數值、字串或是日期時間資料類型。MAX()/MIN()函數將返回與被傳遞的列同一資料類型的單一值。
執行個體7 MAX()函數的使用
查詢TEACHER表中教師的最大年齡。執行個體代碼:
SELECT MAX (AGE) AS MAXAGE
FROM TEACHER
運行結果1示。
圖1TEACHER表中教師的最大年齡
然而,在實際應用中得到這個結果並不是特別有用,因為經常想要獲得的資訊是具有最大年齡的教師的教工號、姓名、性別等資訊。
然而SQL不支援如下的SELECT語句。
SELECT TNAME, DNAME, TSEX, MAX (AGE)
FROM TEACHER
因為彙總函式處理的是資料群組,在本例中,MAX函數將整個TEACHER表看成一組,而TNAME、DNAME和TSEX的資料都沒有進行任何分組,因此SELECT語句沒有邏輯意義。同樣的道理,下面的代碼也是無效的。
SELECT TNAME, DNAME, TSEX,SAL ,AGE
FROM TEACHER
WHERE AGE=MAX (AGE)
解決這個問題的方法,就是在WHERE子句中使用子查詢來返回最大值,然後再基於這個返回的最大值,查詢相關資訊。
執行個體8 在WHERE子句中使用子查詢返回最大值
查詢TEACHER表中年紀最大的教師的教工號、姓名、性別等資訊。
執行個體代碼:
SELECT TNAME, DNAME, TSEX, SAL, AGE
FROM TEACHER
WHERE AGE=(SELECT MAX (AGE) FROM TEACHER)
運行結果2示。
圖2在WHERE子句中使用子查詢返回最大值
MAX()和MIN()函數不僅可以作用於數值型資料,也可以作用於字串或是日期時間資料類型的資料。
執行個體MAX()函數用於字元型資料
如下面代碼:
SELECT MAX (TNAME) AS MAXNAME
FROM TEACHER
運行結果3示。
圖3在字串資料型別中使用MAX的結果
可見,對於字串也可以求其最大值。
說明
對字元型資料的最大值,是按照首字母由A~Z的順序排列,越往後,其值越大。當然,對於漢字則是按照其全拼拼音排列的,若首字元相同,則比較下一個字元,以此類推。
當然,對與日期時間類型的資料也可以求其最大/最小值,其大小排列就是日期時間的早晚,越早認為其值越小,如下面的執行個體。
執行個體 MAX()、MIN()函數用於時間型資料
從COURSE表中查詢最早和最晚考試課程的考試時間。其中COURSE表的結構和資料可參見本書6.1節的表6-1。執行個體代碼:
SELECT MIN (CTEST) AS EARLY_DATE,
MAX (CTEST) AS LATE_DATE
FROM COURSE
運行結果4示。
圖4COURSE表中最早和最晚考試課程的考試時間
可見,返回結果的資料類型與該列定義的資料類型相同。
注意
確定列中的最大值(最小值)時,MAX( )(MIN( ))函數忽略NULL值。但是,如果在該列中,所有行的值都是NULL,則MAX( )/MIN( )函數將返回NULL值。