Je voudrais utiliser une valeur par défaut pour une colonne qui devrait être utilisée si aucune ligne n'est retournée. Est-ce possible dans PostgreSQL? Comment puis-je le faire? Ou existe-t-il un autre moyen de résoudre ce problème?
Par exemple. quelque chose comme ça:
SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
Et s'il n'y a pas de lignes avec org_id = 3
dans le tableau que je veux renvoyer 0
.
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3
ou
SELECT case count(*) when 0 then 0 else MAX(post_id) end AS max_id
FROM my_table
WHERE org_id = 3;
si vous voulez que max (post_id) soit null
quand il y a 1 ligne mais post_id est null
Si vous voulez montrer 0
(hélas 1 ligne) lorsque votre requête renvoie 0 ligne, vous pouvez alors utiliser:
SELECT COALESCE(
( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
, 0) AS max_id
SELECT
coalesce(MAX(post_id),0) AS max_id
FROM
my_table
WHERE
org_id = 3
Les éléments ci-dessus ne fonctionnent pas si vous souhaitez utiliser le nom par défaut pour le champ de nom et cela ne fonctionne que si vous utilisez le champ de numéro. La requête ci-dessous fonctionne pour tous les types de champs.
SELECT
COALESCE(
(SELECT column_name FROM my_table WHERE id = -1),
'default_value'
) AS column_name;
Je ne parviens pas à faire fonctionner les éléments ci-dessus.
Voici ce que j'ai trouvé pour travailler:
SELECT COALESCE(A.max_id, B.dflt) FROM (
SELECT MAX(post_id) AS max_id FROM my_table WHERE org_id = 3) A
RIGHT OUTER JOIN (SELECT 0 AS dflt) B
ON 1 = 1
Je ne réalise pas une solution élégante mais fait le travail.