SQL: [Docs] Add example for custom bucketing with CASE (#41787)

Add a TIP on how to use CASE to achieve custom bucketing
with GROUP BY.

Follows: #41349

(cherry picked from commit eb5f5d45533c5f81e57dd0221d902a73ec400098)
This commit is contained in:
Marios Trivyzas 2019-05-06 18:00:50 +03:00 committed by Marios Trivyzas
parent 2306531815
commit 228d23de6d
No known key found for this signature in database
GPG Key ID: 8817B46B0CF36A3F
2 changed files with 28 additions and 0 deletions

View File

@ -98,6 +98,30 @@ an error message would be returned, mentioning that *'foo'* is of data type *key
which does not match the expected data type *integer* (based on result *10*).
===============================
[[sql-functions-conditional-case-groupby-custom-buckets]]
===== Conditional bucketing
CASE can be used as a GROUP BY key in a query to facilitate custom bucketing
and assign descriptive names to those buckets. If, for example, the values
for a key are too many or, simply, ranges of those values are more
interesting than every single value, CASE can create custom buckets as in the
following example:
[source, sql]
SELECT count(*) AS count,
CASE WHEN NVL(languages, 0) = 0 THEN 'zero'
WHEN languages = 1 THEN 'one'
WHEN languages = 2 THEN 'bilingual'
WHEN languages = 3 THEN 'trilingual'
ELSE 'multilingual'
END as lang_skills
FROM employees
GROUP BY lang_skills
ORDER BY lang_skills;
With this query, one can create normal grouping buckets for values _0, 1, 2, 3_ with
descriptive names, and every value _>= 4_ falls into the _multilingual_ bucket.
[[sql-functions-conditional-coalesce]]
==== `COALESCE`

View File

@ -204,6 +204,10 @@ Multiple aggregates used:
include-tagged::{sql-specs}/docs/docs.csv-spec[groupByAndMultipleAggs]
----
[TIP]
If custom bucketing is required, it can be achieved with the use of `<<sql-functions-conditional-case, CASE>>`,
as shown <<sql-functions-conditional-case-groupby-custom-buckets, here>>.
[[sql-syntax-group-by-implicit]]
===== Implicit Grouping