max_by toplama işlevi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Gruptaki ikinci bir ifadenin en büyük değeriyle ilişkili bir ifadenin değerini döndürür. İsteğe bağlı üçüncü bağımsız değişkenle, sıralama ifadesinin en büyük değerlerine karşılık gelen en çok limit değer içeren bir dizi döndürür.

Sözdizimi

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

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 18.1 ve üzeri

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

Bu işlev, yan tümcesi kullanılarak OVER olarak da çağrılabilir.

Bağımsız değişkenler

  • expr: Değeri döndürülecek ifade. Herhangi bir veri türü olabilir.
  • ordExpr: En büyük değeri (sıralama anahtarı) belirlemek için kullanılan ifade. Sipariş edilebilir bir tür olmalıdır.
  • limit: (İsteğe bağlı) INT Döndürülecek en fazla değer sayısını temsil eden değer. 0'dan büyük ve 100.000'den küçük veya buna eşit olmalıdır. Sağlandığında, işlev en çok limit değer içeren bir dizi döndürür.
  • cond: Toplama için kullanılan satırları filtreleyerek isteğe bağlı bir boole ifadesi.

Döndürülenler

olmadan limit, sonuç türü türüyle eşleşir expr. Birden çok satır aynı en yüksek değere ordExprsahipse sonuç belirleyici değildir.

ile limit: ARRAY öğesi türü türüyle eşleşen değerlerden biri expr. Dizi en çok limit öğe içerir. Sıralamalara NULL karşılık gelen değerler dahil değildir. Tüm sıralama değerleri ise NULL, sonuç olur NULL. Birden çok satır aynı en büyük değerleri paylaşıyorsa işlev belirleyici değildir.

Not

STRINGgibi belirli UTF8_LCASE harmanlamaları için sonuç da belirleyici olmayabilir.

Örnekler

> 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)