Analytische functies

Functies voor het bewerken van data in SQL Server

Ana Voicu

Data Engineer

FIRST_VALUE()

FIRST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Geeft de eerste waarde in een geordende set terug.

OVER-clause onderdelen

Component Status Omschrijving
PARTITION by column optioneel verdeelt de resultset in partities
ORDER BY column verplicht ordent de resultset
ROW_or_RANGE frame optioneel stelt de partitielimieten in
Functies voor het bewerken van data in SQL Server

LAST_VALUE()

LAST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Geeft de laatste waarde in een geordende set terug.
Functies voor het bewerken van data in SQL Server

Partitielimieten

RANGE BETWEEN start_boundary AND end_boundary
ROWS BETWEEN start_boundary AND end_boundary
Grens Omschrijving
UNBOUNDED PRECEDING eerste rij in de partitie
UNBOUNDED FOLLOWING laatste rij in de partitie
CURRENT ROW huidige rij
PRECEDING vorige rij
FOLLOWING volgende rij
Functies voor het bewerken van data in SQL Server

Voorbeeld van FIRST_VALUE() en LAST_VALUE()

SELECT
    first_name + ' ' + last_name AS name,
    gender,
    total_votes AS votes,    
    FIRST_VALUE(total_votes) 
    OVER (PARTITION BY gender ORDER BY total_votes) AS min_votes,
    LAST_VALUE(total_votes) 
        OVER (PARTITION BY gender ORDER BY total_votes 
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS max_votes
FROM voters;
| name            | gender | votes | min_votes | max_votes |
|-----------------|--------|-------|-----------|-----------|
| Michele Suarez  | F      | 20    | 20        | 189       |
| ...             | ...    | ...   | 20        | 189       |
| Marcus Jenkins  | M      | 16    | 16        | 182       |
| Micheal Vazquez | M      | 18    | 16        | 182       |
Functies voor het bewerken van data in SQL Server

LAG() en LEAD()

LAG(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Haalt data op uit een vorige rij in dezelfde resultset.

LEAD(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Haalt data op uit een volgende rij in dezelfde resultset.
Functies voor het bewerken van data in SQL Server

Voorbeeld van LAG() en LEAD()

SELECT 
    broad_bean_origin AS bean_origin,
    rating,
    cocoa_percent,
    LAG(cocoa_percent) OVER(ORDER BY rating ) AS percent_lower_rating,
    LEAD(cocoa_percent) OVER(ORDER BY rating ) AS percent_higher_rating
FROM ratings
WHERE company = 'Felchlin'
ORDER BY rating ASC;
| bean_origin        | rating | cocoa_percent | percent_lower_rating | percent_higher_rating |
|--------------------|--------|---------------|----------------------|-----------------------|
| Grenada            | 3      | 0.58          | NULL                 | 0.62                  |
| Dominican Republic | 3.75   | 0.62          | 0.58                 | 0.64                  |
| Madagascar         | 3.75   | 0.64          | 0.74                 | 0.65                  |
| Venezuela          | 4      | 0.65          | 0.74                 | NULL                  |
Functies voor het bewerken van data in SQL Server

Laten we oefenen!

Functies voor het bewerken van data in SQL Server

Preparing Video For Download...