Les conditions
CASE..WHEN..THEN..ELSE..
Cela ressemble à l'expression ternaire dans les langages de programmation classiques.Catégoriser des dates
case
when dt < '2023-08-01' then '1. Avant'
when dt < '2023-09-01' then '2. Pendant'
when dt >= '2023-09-01' then '3. Apres'
end periode
Segementer la base client suivant les montants d'achats
case
when total_amount > 0 and total_amount < 5000 then 'LVC'
when total_amount >= 5000 and total_amount < 70000 then 'MVC'
when total_amount >= 70000 then 'HVC'
else 'Inactive' end as segment
```sql title = "Pivot Table" select dt, sum(case when product_category = 'Data Package' then amount else 0 end) data_pack_amount, sum(case when product_category = 'Voice Package' then amount else 0 end) voice_pack_amount, sum(case when product_category = 'Voice & Data Package' then amount else 0 end) mix_pack_amount, sum(case when product_category = 'Communication Credit' then amount else 0 end) credit_amount, sum(case when product_category = 'Other' then amount else 0 end) other_amount from edw.fct_orders where dt = rundt group by 1
## Structure conditionnelle `IF..THEN..`
La structure conditionnelle `IF` permet d'exécuter des instructions lorsqu'une condition est vérifiée.
```sql title="Structure conditionnelle" linenums="1"
do
$$
declare
age integer;
begin
age := 35;
if age >= 18 then
raise info 'You are major !';
end if;
end;
$$;
Structure alternative
Structure conditionnelle avec alternative | |
---|---|
Structure conditionnelle imbriquée
Dans le cadre de problèmes complexes, il peut être nécessaire
Structure conditionnelle avec alternative | |
---|---|
Conditions imbriquées
Dans le cadre de problèmes complexes, il peut être nécessaire
Structure conditionnelle avec alternative | |
---|---|
Applications
if rundt >= '2024-01-01' then
drop table if exists tmp.store_orders_stg;
create table tmp.store_orders_stg as (
select *
from prod.store_orders t
where order_date >= rundt
and order_date < rundt + 1
);
else
drop table if exists tmp.store_orders_stg;
create table tmp.store_orders_stg as (
select *
from stagging.orders t
where order_date >= rundt
and order_date < rundt + 1
);
end if;
Arrêter l'execution pour certaines plages d'heures par exemple
Arrêter l'execution lorsque les données source ne sont pas disponibles
--- Compter le nombre de lignes
select count(*)
into _cnt
from tmp.store_orders_stg
where dt = rundt;
if _cnt = 0 then
raise notice 'Data not found !';
return 'N';
end if;
.