Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous.
C'est mon premier post ici donc bonjour et merci à tous ceux qui prendront le temps de lire ce qui suit
J'ai une demande de mon président qui voudrait que je sorte l'évolution par semaine du nombre d'abonnés à notre plate-forme ayant créés des missions. Les résultats doivent être classés par tranche de 0-5, 6-10, 11-20 et plus de 20.
J'ai fait cette requête :
SELECT COUNT(DISTINCT owner_id) AS total_abonnes,
to_char(to_timestamp(created_at / 1000), 'IYYY-IW') AS semaine,
CASE
WHEN COUNT(*) BETWEEN 0 AND 5 THEN '0-5'
WHEN COUNT(*) BETWEEN 6 AND 10 THEN '6-10'
WHEN COUNT(*) BETWEEN 11 AND 20 THEN '11-20'
ELSE 'plus de 20'
END AS tranche
FROM missions
HAVING status <> 'DRAFT'
AND owner_id NOT IN (SELECT id FROM organisations WHERE name ILIKE '%innov-atm%')
GROUP BY semaine, tranche
ORDER BY semaine DESC, tranche ASC;
Postgre me répond que la syntaxe de mon GROUP BY n'est pas bonne. Je ne comprends absolument pas pourquoi.
Si un expert du SQL peut me sortir de cette galère, ce serait incroyablement cool^^
Si vous avez des questions, n'hésitez pas.
Merci à tous et bon courage
Hors ligne
Sans la description des tables, le message d'erreur exact et idéalement un moyen de reproduire le problème c'est assez compliqué de répondre.
Julien.
https://rjuju.github.io/
Hors ligne
Il y a apparemment deux problèmes liés à GROUP BY dans cette requête.
1) Il faut utiliser WHERE et non pas HAVING pour filtrer les lignes de la table missions. L'utilisation de HAVING est réservée aux conditions qui s'appliquent aux résultats aggrégés avec GROUP BY.
2) le GROUP BY tranche semble ne pas avoir de sens puisque la tranche est elle même le résultat d'une aggrégation par semaine.
Si la requête est trop complexe il faut il y aller progressivement et la construire étage par étage en validant les étapes intermédiaires.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Pages : 1