Accéder au contenu principal

Fonction SQL COALESCE

COALESCE() est l'une des fonctions les plus pratiques de SQL. Lisez ce tutoriel pour apprendre à le maîtriser.
Actualisé 14 nov. 2024  · 4 min de lecture

Qu'est-ce que la COALESCE()fonction ?

Coalesce renvoie la première valeur non nulle d'une liste. Si toutes les valeurs de la liste sont NULL, la fonction renvoie null.

Quand utiliser COALESCE()?

Cette fonction est utile pour combiner les valeurs de plusieurs colonnes en une seule.

Par exemple, un tableau appelé utilisateurs contient les valeurs des utilisateurs work_email et personal_email.

En utilisant la fonction COALESCE(), nous pouvons créer une colonne appelée email, qui affiche l'adresse work_email de l'utilisateur si elle n'est pas nulle. Dans le cas contraire, il affiche personal_email.

user_id

work_email

personal_email

COALESCE() de

work_email et

personal_email

1

angel@datacamp.com

nul

angel@datacamp.com

2

nul

bruce@gmail.com

bruce@gmail.com

3

cath@datacamp.com

cath@gmail.com

cath@datacamp.com

COALESCE() syntax

COALESCE(value_1, value_2, ...., value_n)

La fonction COALESCE() prend en compte au moins une valeur (value_1). Il renverra la première valeur de la liste qui n'est pas nulle. 

Par exemple, il vérifiera d'abord si value_1 est nul. Si ce n'est pas le cas, il renvoie value_1. Sinon, il vérifie si value_2 est nul. Le processus se poursuit jusqu'à ce que la liste soit complète. 

COALESCE() exemples

Exécutez et modifiez le code de ce tutoriel en ligne

Exécuter le code

Exemple 1 : COALESCE() une colonne avec une constante

Considérez le tableau countries avec une liste de pays et leurs fêtes nationales. Certaines journées nationales sont vides. Pour les lignes contenant des jours nationaux vides, nous pouvons les remplir avec la valeur 'Unknown'

La requête et le résultat sont les suivants. 

SELECT
   country_id,
   name, 
   national_day,
   COALESCE(national_day, 'Unknown') AS national_day_coalesced
FROM countries
ORDER BY country_id

country_id

name

national_day

national_day_coalesced

1

Aruba

nul

Inconnu

2

Afghanistan

1919-08-19T00:00:00.000Z

1919-08-19

3

Angola

1975-11-11T00:00:00.000Z

1975-11-11

4

Anguilla

1967-05-30T00:00:00.000Z

1967-05-30

Remarquez que la valeur null dans national_day est remplacée par une constante Unknown

Exemple 2 : COALESCE() deux colonnes

Nous disposons d'un tableau nommé products. Il contient le nom du produit et sa description. Certaines descriptions sont trop longues (plus de 60 caractères). Dans ce cas, nous remplaçons la description par le nom du produit.

La requête et le résultat sont les suivants.

SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE WHEN 
         LENGTH(description) >= 60 
         THEN NULL 
         ELSE description 
         END, 
      product_name) product_name_or_description
FROM products
product_name

description

product_name_or_description

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:14Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:15Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

Asus X99-E-10G WS

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

Supermicro X9SRH-7TF

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

Remarquez que la colonne product_name_or_description affiche product_name si le description est long. Dans le cas contraire, il affiche le site description.

 Exemple 3 : COALESCE() trois colonnes ou plus

Nous pouvons aller plus loin dans l'exemple 2. Supposons qu'il y ait actuellement deux exigences.

  • Si la longueur du description est inférieure à 60, affichez le description.
  • Sinon, vérifiez si la longueur de product_name est inférieure à 20. Si c'est le cas, nous affichons le product_name
  • Sinon, affichez product
SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE 
         WHEN LENGTH(description) > 50
         THEN NULL
         ELSE description
      END,
   CASE 
      WHEN LENGTH(product_name) > 14
      THEN NULL
      ELSE product_name
   END,
'product') AS product_name_or_description
FROM products
ORDER BY product_name

product_name

description

product_name_or_description

ADATA ASU800SS-128GT-C

Série:Ultimate SU800,Type:SSD,Capacité:128GB,Cache:N/A

produit

ADATA ASU800SS-512GT-C

Série:Ultimate SU800,Type:SSD,Capacité:512GB,Cache:N/A

produit

AMD 100-5056062

Chipset:Vega Frontier Edition Liquid,Memory:16GBCore Clock:1.5GHz

produit

AMD 100-505989

Chipset:FirePro W9100,Memory:32GBCore Clock:930MHz

Chipset:FirePro W9100,Memory:32GBCore Clock:930MHz

Remarquez que la colonne product_name_or_description affiche soit product_name soit description en fonction de la longueur des colonnes product_name et description.

Exigences techniques

COALESCE() fonctionne avec SQL Server (à partir de 2008), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse, BigQuery et Amazon RedShift.

Voir aussi

En savoir plus sur SQL

Sujets

Cours SQL populaires

Certification disponible

cours

Introduction à SQL

2 hr
881.7K
Apprenez à créer et à interroger des bases de données relationnelles à l'aide de SQL en seulement deux heures.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow