max_byFungsi agregat

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Mengembalikan nilai ekspresi yang terkait dengan nilai terbesar ekspresi kedua dalam grup. Dengan argumen ketiga opsional, mengembalikan array hingga limit nilai yang sesuai dengan nilai terbesar ekspresi pengurutan.

Sintaks

max_by(expr, ordExpr) [FILTER ( WHERE cond ) ]
max_by(expr, ordExpr, limit) [FILTER ( WHERE cond ) ]

Fungsi ini juga dapat dipanggil sebagai fungsi jendela menggunakan klausa OVER.

Argumen

  • expr: Ekspresi yang nilainya akan dikembalikan. Dapat berupa jenis data apa pun.
  • ordExpr: Ekspresi yang digunakan untuk menentukan nilai maksimum (kunci pengurutan). Harus jenis yang dapat diurutkan.
  • batas: (Opsional) Nilai INT yang menunjukkan jumlah maksimum nilai yang akan dikembalikan. Harus lebih besar dari 0 dan kurang dari atau sama dengan 100.000. Saat disediakan, fungsi mengembalikan array hingga limit nilai.
  • cond: Ekspresi boolean opsional yang memfilter baris yang digunakan untuk agregasi.

Pengembalian

Tanpa limit: jenis hasil cocok dengan jenis expr. Jika beberapa baris memiliki nilai maksimum yang sama, ordExprhasilnya tidak deterministik.

Dengan : ARRAY nilai yang jenis elemennya cocok dengan limitjenis expr. Array berisi hingga limit elemen. Nilai yang NULL sesuai dengan urutan tidak disertakan. Jika semua nilai pemesanan adalah NULL, hasilnya adalah NULL. Jika beberapa baris memiliki nilai terbesar yang sama, fungsinya tidak deterministik.

Nota

Untuk kolase STRING tertentu, seperti UTF8_LCASE, hasilnya mungkin juga tidak deterministik.

Contoh

> SELECT max_by(x, y, 2) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);
 [b, c]

-- Return top 2 values by ordering expression
> SELECT year, max_by(course, earnings, 2) FROM data GROUP BY year;
 year: 2012, max_by(course, earnings, 2): [Java, c]

> SELECT max_by(x, y COLLATE UTF8_LCASE) FROM VALUES (('a', 'X')), (('b', 'x')), (('c', 'v')) AS tab(x, y);
 a (or b)