Fungsi logika - GREATEST (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL di Microsoft FabricWarehouse di Microsoft Fabric

Fungsi ini mengembalikan nilai maksimum dari daftar satu atau beberapa ekspresi.

Konvensi sintaks transact-SQL

Sintaks

GREATEST ( expression1 [ , ...expressionN ] )

Argumen

expression1, expressionN

Daftar ekspresi yang dipisahkan koma dari jenis data yang sebanding. Fungsi ini GREATEST memerlukan setidaknya satu argumen dan mendukung tidak lebih dari 254 argumen.

Setiap ekspresi dapat berupa konstanta, variabel, nama kolom atau fungsi, dan kombinasi operator aritmatika, bitwise, dan string apa pun. Fungsi agregat dan subkueri skalar diizinkan.

Jenis yang dikembalikan

Mengembalikan tipe data dengan prioritas tertinggi dari kumpulan jenis yang diteruskan ke fungsi. Untuk informasi selengkapnya, lihat Prioritas Tipe Data (Transact-SQL).

Jika semua argumen memiliki jenis data yang sama dan jenisnya didukung untuk perbandingan, GREATEST mengembalikan jenis tersebut.

Jika tidak, fungsi akan secara implisit mengonversi semua argumen ke jenis data dengan prioritas tertinggi sebelum perbandingan dan menggunakan jenis ini sebagai jenis pengembalian.

Untuk jenis numerik, skala jenis pengembalian akan sama dengan argumen prioritas tertinggi, atau skala terbesar jika lebih dari satu argumen adalah jenis data prioritas tertinggi.

Keterangan

Semua ekspresi dalam daftar argumen harus dari jenis data yang sebanding dan yang dapat dikonversi secara implisit ke jenis data argumen dengan prioritas tertinggi.

Konversi implisit semua argumen ke jenis data prioritas tertinggi terjadi sebelum perbandingan.

Jika konversi jenis implisit antara argumen tidak didukung, fungsi akan gagal dan mengembalikan kesalahan.

Untuk informasi selengkapnya tentang konversi implisit dan eksplisit, lihat Konversi Tipe Data (Mesin Database).

Jika satu atau beberapa argumen tidak NULL, maka NULL argumen diabaikan selama perbandingan. Jika semua argumen adalah NULL, maka GREATEST mengembalikan NULL.

Perbandingan argumen karakter mengikuti aturan Prioritas Kolase (Transact-SQL).

Jenis berikut tidak didukung untuk perbandingan di GREATEST: varchar(max), varbinary(max) atau nvarchar(max) melebihi 8.000 byte, kursor, geometri, geografi, gambar, jenis yang ditentukan pengguna yang tidak diurutkan byte, ntext, tabel, teks, dan xml.

Jenis data varchar(max), varbinary(max), dan nvarchar(max) didukung untuk argumen yang masing-masing 8.000 byte atau kurang, dan akan dikonversi secara implisit ke varchar(n), varbinary(n), dan nvarchar(n), sebelum perbandingan.

Misalnya, varchar(max) dapat mendukung hingga 8.000 karakter jika menggunakan set karakter pengodean byte tunggal, dan nvarchar(max) dapat mendukung hingga 4.000 byte-pairs (dengan asumsi pengodean karakter UTF-16).

Contoh

J. Mengembalikan nilai maksimum dari daftar konstanta

Contoh berikut mengembalikan nilai maksimum dari daftar konstanta yang disediakan.

Skala jenis pengembalian ditentukan oleh skala argumen dengan jenis data prioritas tertinggi.

SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO

Berikut adalah hasil yang ditetapkan.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Mengembalikan nilai maksimum dari daftar konstanta karakter

Contoh berikut mengembalikan nilai maksimum dari daftar konstanta karakter yang disediakan.

SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO

Berikut adalah hasil yang ditetapkan.

GreatestString
-------------
Mount Rainier

(1 rows affected)

C. Mengembalikan nilai maksimum dari daftar argumen kolom

Contoh ini mengembalikan nilai maksimum dari daftar argumen kolom dan mengabaikan NULL nilai selama perbandingan. Sampel ini menggunakan AdventureWorksLT database, yang dapat dengan cepat diinstal sebagai database sampel untuk Azure SQL Database baru. Untuk informasi selengkapnya, lihat Database sampel AdventureWorks.

SELECT P.Name,
    P.SellStartDate,
    P.DiscontinuedDate,
    PM.ModifiedDate AS ModelModifiedDate,
    GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS LatestDate
FROM SalesLT.Product AS P
INNER JOIN SalesLT.ProductModel AS PM
    ON P.ProductModelID = PM.ProductModelID
WHERE GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01'
    AND P.SellStartDate >= '2007-01-01'
    AND P.Name LIKE 'Touring %'
ORDER BY P.Name;

Berikut adalah hasil yang ditetapkan. LatestDate memilih nilai tanggal terbesar dari tiga nilai, mengabaikan NULL.

Name                 SellStartDate           DiscontinuedDate    ModelModifiedDate       LatestDate
-------------------- ----------------------- ------------------- ----------------------- -----------------------
Touring Pedal        2007-07-01 00:00:00.000 NULL                2009-05-16 16:34:29.027 2009-05-16 16:34:29.027
Touring Tire         2007-07-01 00:00:00.000 NULL                2007-06-01 00:00:00.000 2007-07-01 00:00:00.000
Touring Tire Tube    2007-07-01 00:00:00.000 NULL                2007-06-01 00:00:00.000 2007-07-01 00:00:00.000

(3 rows affected)

D. Gunakan GREATEST dengan variabel lokal

Contoh ini digunakan GREATEST untuk menentukan nilai maksimum daftar variabel lokal dalam predikat WHERE klausa.

CREATE TABLE dbo.Studies (
    VarX VARCHAR(10) NOT NULL,
    Correlation DECIMAL(4, 3) NULL
    );

INSERT INTO dbo.Studies
VALUES ('Var1', 0.2),
    ('Var2', 0.825),
    ('Var3', 0.61);
GO

DECLARE @PredictionA DECIMAL(2, 1) = 0.7;
DECLARE @PredictionB DECIMAL(3, 1) = 0.65;

SELECT VarX,
    Correlation
FROM dbo.Studies
WHERE Correlation > GREATEST(@PredictionA, @PredictionB);
GO

Berikut adalah hasil yang ditetapkan. Hanya nilai yang lebih besar dari 0,7 yang ditampilkan.

VarX       Correlation
---------- -----------
Var2              .825

(1 rows affected)

E. Gunakan GREATEST dengan kolom, konstanta, dan variabel

Contoh ini digunakan GREATEST untuk menentukan nilai maksimum daftar campuran yang mencakup kolom, konstanta, dan variabel.

CREATE TABLE dbo.Studies (
    VarX VARCHAR(10) NOT NULL,
    Correlation DECIMAL(4, 3) NULL
    );

INSERT INTO dbo.Studies
VALUES ('Var1', 0.2),
    ('Var2', 0.825),
    ('Var3', 0.61);
GO

DECLARE @VarX DECIMAL(4, 3) = 0.59;

SELECT VarX,
    Correlation,
    GREATEST(Correlation, 0, @VarX) AS GreatestVar
FROM dbo.Studies;
GO

Berikut adalah hasil yang ditetapkan.

VarX       Correlation           GreatestVar
---------- --------------------- ---------------------
Var1       0.200                 0.590
Var2       0.825                 0.825
Var3       0.610                 0.610

(3 rows affected)

Langkah berikutnya