URL: https://linuxfr.org/forums/programmationautre/posts/requetes-sql Title: Requêtes SQL Authors: ilip Date: 2012年11月21日T11:26:33+01:00 Tags: postgresql Score: 0 Bonjour, Je travaille sous PostgreSQL, avec une quantitée de données importante dans une table consituée des colonnes suivantes : id : clé primaire timestamp : timestamp d'enregistrement de la valeur status : un code erreur, qui varie de 0 à 10 valeur : une valeur qui varie de 0 à 100 La première requête concerne la colonne status. Il s'agit de renvoyer le nombre d'occurence trouvé dans la table pour chaque status. Exemple : [ n° du status ] [ nombre d'occurence ] 0 - 66 1 - 12 2 - 0 3 - 0 4 - 5 5 - 0 6 - 6 7 - 44 8 - 23 9 - 0 J'aimerai savoir si ceci peut être réalisé en une seule requête (pour les performances). On pourrait utiliser la fonction PostgreSQL generate_series(0, 10, 1) qui génère les chiffres de 0 à 10, mais je ne sais pas comment l'utiliser ensuite pour le comptage pour chaque status. La deuxième requête est plus complexe, je ne sais pas si c'est possible en une seule requête, il s'agit de retourner le nombre de valeurs comprises dans chaque intervals [0 - 10], [10 - 20], [20 - 30] ... [90 - 100] Sinon on peut faire ce genre de chose en programmation PL/pgSQL, avec une boucle FOR mais après tests, cela ne semble pas performant : ```sql FOR row_table_donnees IN SELECT * FROM table_donnees WHERE "timestamp">= timestamp_debut AND "timestamp" < timestamp_fin LOOP CASE -- de 0 à 10 WHEN row_table_donnees.valeur < 10 THEN nbr_echelon_1 := nbr_echelon_1 + 1; -- de 10 à 20 WHEN row_table_donnees.valeur < 20 THEN nbr_echelon_2 := nbr_echelon_2 + 1; -- de 20 à 30 WHEN row_table_donnees.valeur < 30 THEN nbr_echelon_3 := nbr_echelon_3 + 1; -- suppérieur à 30 ELSE nbr_echelon_4 := nbr_echelon_4 + 1; END CASE END LOOP; RETURN NEXT; ```