Aller au contenu principal
Page traduite

Cette page a été traduite de l'anglais avec l'aide de l'IA. En cas de divergence, la version anglaise fait référence.

DENSE_RANK

Renvoie le rang de la ligne courante, sans trous. Il s'agit du numéro du groupe de pairs de la ligne courante au sein de sa partition. Les lignes ayant des valeurs égales pour les colonnes de tri reçoivent le même rang, et la valeur de rang suivante est toujours incrémentée de 1 (sans trous).

Les lignes sont numérotées à partir de 1 dans l'ordre défini par la clause ORDER BY de la définition de la fenêtre. En l'absence de clause ORDER BY, toutes les lignes sont considérées comme des pairs et cette fonction renvoie toujours 1.

Voir aussi : [SELECT] [ROW_NUMBER] [RANK]


Syntaxe​

SELECT DENSE_RANK() OVER ([PARTITION BY column] ORDER BY column [ASC|DESC])
FROM <multipartIdentifier>;

Arguments​

PARTITION BY column Facultatif. Divise le jeu de résultats en partitions. La fonction DENSE_RANK est appliquée à chaque partition séparément.

ORDER BY column Spécifie l'ordre dans lequel les rangs sont attribués. En l'absence de clause ORDER BY, toutes les lignes sont considérées comme des pairs et reçoivent le rang 1.

Valeur(s) renvoyée(s)​

Renvoie un entier représentant le rang dense de la ligne courante au sein de la partition, sans trous pour les valeurs à égalité.


Exemples​

Classer les contributeurs par contributions (sans trous)​

-- Rank contributors without gaps for ties
SELECT
DENSE_RANK() OVER (ORDER BY contributions DESC) as rank,
login,
contributions,
html_url
FROM github.repos.contributors
WHERE owner = 'stackql'
AND repo IN ('stackql', 'stackql-deploy', 'stackql-provider-registry')
ORDER BY contributions DESC;

Comparer DENSE_RANK avec RANK et ROW_NUMBER​

-- Compare RANK vs DENSE_RANK vs ROW_NUMBER for contributors
SELECT
login,
contributions,
RANK() OVER (ORDER BY contributions DESC) as rank,
DENSE_RANK() OVER (ORDER BY contributions DESC) as dense_rank,
ROW_NUMBER() OVER (ORDER BY contributions DESC) as row_num
FROM github.repos.contributors
WHERE owner = 'stackql'
AND repo = 'stackql';

Classer les contributions agrégées sur plusieurs dépôts​

-- Rank total contributions across multiple repos
WITH all_contributors AS (
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql'
UNION ALL
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql-deploy'
UNION ALL
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql-provider-registry'
)
SELECT
DENSE_RANK() OVER (ORDER BY SUM(contributions) DESC) as rank,
login,
SUM(contributions) as total_contributions,
MAX(html_url) as html_url
FROM all_contributors
GROUP BY login
ORDER BY total_contributions DESC;

Pour plus d'informations, consultez https://sqlite.org/windowfunctions.html#built-in_window_functions.