ClickHouse/docs/tr/sql-reference/aggregate-functions/combinators.md
Ivan Blinkov cd14f9ebcb
SQL reference refactoring (#10857)
* split up select.md

* array-join.md basic refactoring

* distinct.md basic refactoring

* format.md basic refactoring

* from.md basic refactoring

* group-by.md basic refactoring

* having.md basic refactoring

* additional index.md refactoring

* into-outfile.md basic refactoring

* join.md basic refactoring

* limit.md basic refactoring

* limit-by.md basic refactoring

* order-by.md basic refactoring

* prewhere.md basic refactoring

* adjust operators/index.md links

* adjust sample.md links

* adjust more links

* adjust operatots links

* fix some links

* adjust aggregate function article titles

* basic refactor of remaining select clauses

* absolute paths in make_links.sh

* run make_links.sh

* remove old select.md locations

* translate docs/es

* translate docs/fr

* translate docs/fa

* remove old operators.md location

* change operators.md links

* adjust links in docs/es

* adjust links in docs/es

* minor texts adjustments

* wip

* update machine translations to use new links

* fix changelog

* es build fixes

* get rid of some select.md links

* temporary adjust ru links

* temporary adjust more ru links

* improve curly brace handling

* adjust ru as well

* fa build fix

* ru link fixes

* zh link fixes

* temporary disable part of anchor checks
2020-05-15 07:34:54 +03:00

10 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 37 Birleştiriciler

Toplama Fonksiyonu Birleştiriciler

Bir toplama işlevinin adı, ona eklenmiş bir sonek olabilir. Bu, toplama işlevinin çalışma şeklini değiştirir.

-Eğer

The suffix -If can be appended to the name of any aggregate function. In this case, the aggregate function accepts an extra argument a condition (Uint8 type). The aggregate function processes only the rows that trigger the condition. If the condition was not triggered even once, it returns a default value (usually zeros or empty strings).

Örnekler: sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) ve böyle devam eder.

Koşullu toplama işlevleriyle, alt sorgular kullanmadan aynı anda birkaç koşul için toplamları hesaplayabilirsiniz ve JOINs. Örneğin, Üye olarak.Metrica, koşullu toplama işlevleri segment karşılaştırma işlevselliğini uygulamak için kullanılır.

-Dizi

- Array soneki herhangi bir toplama işlevine eklenebilir. Bu durumda, toplama işlevi, Array(T) type (ar arraysra )ys) yerine T bağımsız değişkenleri yazın. Toplama işlevi birden çok bağımsız değişken kabul ederse, bu eşit uzunlukta diziler olmalıdır. Dizileri işlerken, toplama işlevi tüm dizi öğelerinde orijinal toplama işlevi gibi çalışır.

Örnek 1: sumArray(arr) - Tüm unsurları toplamları arr diziler. Bu örnekte, daha basit yazılmış olabilir: sum(arraySum(arr)).

Örnek 2: uniqArray(arr) Counts the number of unique elements in all arr diziler. Bu daha kolay bir şekilde yapılabilir: uniq(arrayJoin(arr)), ancak eklemek her zaman mümkün değildir arrayJoin bir sorguya.

- Eğer ve-dizi kombine edilebilir. Ancak, Array önce gel mustmeli, sonra If. Örnekler: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Nedeniyle bu sipariş için, cond argüman bir dizi olmayacak.

-Devlet

Bu birleştiriciyi uygularsanız, toplama işlevi elde edilen değeri döndürmez (örneğin, uniq fonksiyonu), ancak top aggreglamanın bir ara durumu (for uniq, bu benzersiz değerlerin sayısını hesaplamak için karma tablodur). Bu bir AggregateFunction(...) bu, daha fazla işlem için kullanılabilir veya daha sonra toplanmayı bitirmek için bir tabloda saklanabilir.

Bu durumlarla çalışmak için şunları kullanın:

-Birleştirmek

Bu birleştiriciyi uygularsanız, toplama işlevi Ara toplama durumunu bağımsız değişken olarak alır, toplama işlemini tamamlamak için durumları birleştirir ve elde edilen değeri döndürür.

- MergeState

Ara toplama durumlarını-birleştirme Birleştiricisi ile aynı şekilde birleştirir. Bununla birlikte, elde edilen değeri döndürmez, ancak-State combinator'a benzer bir ara toplama durumu döndürür.

- ForEach

Tablolar için bir toplama işlevi, karşılık gelen dizi öğelerini toplayan ve bir dizi sonuç döndüren diziler için bir toplama işlevine dönüştürür. Mesela, sumForEach diz theiler için [1, 2], [3, 4, 5]ve[6, 7]sonucu döndürür [10, 13, 5] karşılık gelen dizi öğelerini bir araya getirdikten sonra.

- OrDefault

Toplama işlevinin davranışını değiştirir.

Bir toplama işlevinin giriş değerleri yoksa, bu birleştirici ile dönüş veri türü için varsayılan değeri döndürür. Boş giriş verilerini alabilen toplama işlevlerine uygulanır.

-OrDefault diğer birleştiriciler ile kullanılabilir.

Sözdizimi

<aggFunction>OrDefault(x)

Parametre

  • x — Aggregate function parameters.

Döndürülen değerler

Toplamak için hiçbir şey yoksa, bir toplama işlevinin dönüş türünün Varsayılan değerini döndürür.

Türü kullanılan toplama işlevine bağlıdır.

Örnek

Sorgu:

SELECT avg(number), avgOrDefault(number) FROM numbers(0)

Sonuç:

┌─avg(number)─┬─avgOrDefault(number)─┐
│         nan │                    0 │
└─────────────┴──────────────────────┘

Ayrıca -OrDefault başka bir birleştiriciler ile kullanılabilir. Toplama işlevi boş girişi kabul etmediğinde yararlıdır.

Sorgu:

SELECT avgOrDefaultIf(x, x > 10)
FROM
(
    SELECT toDecimal32(1.23, 2) AS x
)

Sonuç:

┌─avgOrDefaultIf(x, greater(x, 10))─┐
│                              0.00 │
└───────────────────────────────────┘

- OrNull

Toplama işlevinin davranışını değiştirir.

Bu birleştirici, bir toplama işlevinin sonucunu Nullable veri türü. Toplama işlevi hesaplamak için değerleri yoksa döndürür NULL.

-OrNull diğer birleştiriciler ile kullanılabilir.

Sözdizimi

<aggFunction>OrNull(x)

Parametre

  • x — Aggregate function parameters.

Döndürülen değerler

  • Toplama işlev resultinin sonucu, Nullable veri türü.
  • NULL, toplamak için bir şey yoksa.

Tür: Nullable(aggregate function return type).

Örnek

Eklemek -orNull toplama işlevinin sonuna kadar.

Sorgu:

SELECT sumOrNull(number), toTypeName(sumOrNull(number)) FROM numbers(10) WHERE number > 10

Sonuç:

┌─sumOrNull(number)─┬─toTypeName(sumOrNull(number))─┐
│              ᴺᵁᴸᴸ │ Nullable(UInt64)              │
└───────────────────┴───────────────────────────────┘

Ayrıca -OrNull başka bir birleştiriciler ile kullanılabilir. Toplama işlevi boş girişi kabul etmediğinde yararlıdır.

Sorgu:

SELECT avgOrNullIf(x, x > 10)
FROM
(
    SELECT toDecimal32(1.23, 2) AS x
)

Sonuç:

┌─avgOrNullIf(x, greater(x, 10))─┐
│                           ᴺᵁᴸᴸ │
└────────────────────────────────┘

- Resample

Verileri gruplara ayırmanızı sağlar ve ardından bu gruplardaki verileri ayrı ayrı toplar. Gruplar, değerleri bir sütundan aralıklara bölerek oluşturulur.

<aggFunction>Resample(start, end, step)(<aggFunction_params>, resampling_key)

Parametre

  • start — Starting value of the whole required interval for resampling_key değerler.
  • stop — Ending value of the whole required interval for resampling_key değerler. Tüm Aralık içermez stop değer [start, stop).
  • step — Step for separating the whole interval into subintervals. The aggFunction bu alt aralıkların her biri üzerinde bağımsız olarak yürütülür.
  • resampling_key — Column whose values are used for separating data into intervals.
  • aggFunction_paramsaggFunction parametre.

Döndürülen değerler

  • Ar arrayray of aggFunction her subinterval için sonuçlar.

Örnek

Düşünün people aşağıdaki verilerle tablo:

┌─name───┬─age─┬─wage─┐
│ John   │  16 │   10 │
│ Alice  │  30 │   15 │
│ Mary   │  35 │    8 │
│ Evelyn │  48 │ 11.5 │
│ David  │  62 │  9.9 │
│ Brian  │  60 │   16 │
└────────┴─────┴──────┘

Yaş aralığı içinde olan kişilerin isimlerini alalım [30,60) ve [60,75). Yaş için tamsayı temsilini kullandığımızdan, yaşları [30, 59] ve [60,74] aralıklılar.

Bir dizideki isimleri toplamak için, groupArray toplama işlevi. Bir argüman alır. Bizim durumumuzda, bu name sütun. Bu groupArrayResample fonksiyon kullanmalıdır age yaşlara göre isimleri toplamak için sütun. Gerekli aralıkları tanımlamak için 30, 75, 30 argü themanlar içine groupArrayResample İşlev.

SELECT groupArrayResample(30, 75, 30)(name, age) FROM people
┌─groupArrayResample(30, 75, 30)(name, age)─────┐
│ [['Alice','Mary','Evelyn'],['David','Brian']] │
└───────────────────────────────────────────────┘

Sonuçları düşünün.

Jonh çok genç olduğu için numunenin dışında. Diğer insanlar belirtilen yaş aralıklarına göre dağıtılır.

Şimdi toplam insan sayısını ve ortalama ücretlerini belirtilen yaş aralıklarında sayalım.

SELECT
    countResample(30, 75, 30)(name, age) AS amount,
    avgResample(30, 75, 30)(wage, age) AS avg_wage
FROM people
┌─amount─┬─avg_wage──────────────────┐
│ [3,2]  │ [11.5,12.949999809265137] │
└────────┴───────────────────────────┘

Orijinal makale