PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/03/2023 14:20:04

Damien31
Membre

Récupération de données classées par tranches

Bonjour à tous.

C'est mon premier post ici donc bonjour et merci à tous ceux qui prendront le temps de lire ce qui suit smile

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 wink

Hors ligne

#2 29/03/2023 14:27:58

rjuju
Administrateur

Re : Récupération de données classées par tranches

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.

Hors ligne

#3 31/03/2023 14:49:40

dverite
Membre

Re : Récupération de données classées par tranches

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.

Hors ligne

Pied de page des forums