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 Re : Général » requete SQL » 22/12/2016 17:56:20

En effet c'est un peu nouveau, je ne connais pas la fonction rank ni partition. Je ne les pas encore vues en cours.

Mais je comprend le principe de cette requête.

D'abord on compte les membres pour chaque rencontre, mais je ne comprend pas comment SQL sait qu'il doit compter "id_membre"...J'ai un peu de mal avec le COUNT(*) à chaque fois.

Puis on trie les rencontre par ordres de nb_membre décroissant
Ensuite on leur attribue des rangs (ça me fait penser a un test statistique non paramétriques...)
et quand le rang est égal à 1, donc la ou les première(s) valeure(s) dans le classement et vu qu'ils est décroissant ce sont les valeurs recherchées.
Pour finir on les affiche.
C'est bien ça?

Si vous pouvez m'expliquer comment marche "rank over" et "partition by", ce serait parfait smile . Si vous avez le temps bien sur, j'ai déjà bien abusé de votre temps...

#3 Re : Général » requete SQL » 22/12/2016 16:26:53

ah d'accord, donc si j'ai bien compris d'abord on compte le nb de membre pour chaque rencontre, puis on les trie par ordre décroissant et on sélectionne la première ligne qui est donc la rencontre ayant attiré le plus de monde?
Mais si par exemple deux rencontres de même type ont attiré autant de membre? une ne sera pas sélectionner non?

Merci encore pour votre aide

#4 Re : Général » requete SQL » 22/12/2016 16:19:13

c'est parfait, ça marche! merci beaucoup à vous!
Juste qu'est ce que le "desc" à la fin?
et comment marche le DISTINCT ON(type) type?
et comment il prend que les rencontres avec le plus de membres?
encore une fois merci, c'est mes dernières questions je pense et j'espère! smile

#5 Re : Général » requete SQL » 22/12/2016 13:36:22

Je reviens vers vous pour vous poser une autre question:

voici la requête faite:

SELECT type, EXT.id_rencontre, MAX(compte)
FROM rdv AS EXT NATURAL JOIN rencontre AS OUT, (
         SELECT COUNT(id_membre) AS compte
         FROM rdv AS dedans
         GROUP BY dedans.id_rencontre) AS tmp
GROUP BY EXT.rencontre, type;

J'ai réussi grâce à vous à obtenir le max du COUNT. Mais maintenant il me l'afficher pour chaque id_rencontre alors que ce n'est pas valable. Je m'explique: par exemple pour l'id_rencontre n°3 j'ai 2 id_membre pour le type de rencontre 1. Maintenant j'ai l'id_rencontre n°4 j'ai 3 id_membre pour le type de rencontre 1.
Il m'affiche ceci:
id_rencontre   type    MAX
3                    1        3
4                     1        3

Je voudrai bien sur qu'il ne m'affiche que l'id rencontre n°4.

J'ai du mal à trouve le problème qui me parait si simple pourtant.
Désolé ce n'est vraiment pas dans mon habitude de demander trop de chose comme ça.

#7 Re : Général » requete SQL » 21/12/2016 13:39:08

Alors en fait j'ai trois tables:
une table "rencontre": avec comme attribut "type de rencontre", "id_rencontre", le reste n'est pas important, ça concerne date et heure et lieux..
une table membre avec un id_membre et pleins d'information sur les différents membres
une table RDV qui lie les deux tables. Ses attributs sont "id_membre" et "id_rencontre". Je voudrai savoir quelle rencontre a attiré le plus de membres, en classant par type. Donc en gros, pour chaque type de rencontre, quelle rencontre a rassembler le plus membres.

Je faisais un truc du genre:

SELECT type, rdv.id_rencontre, COUNT(DISTINCT id_membre)
FROM rdv, rencontre
WHERE rdv.id_rencontre=rencontre.id_rencontre
GROUP BY type, rdv.id_rencontre
HAVING MAX(COUNT);

Mais on ne peut pas mettre ensemble deux fonctions comme MAX et COUNT...

#8 Général » requete SQL » 20/12/2016 19:44:52

adambase
Réponses : 14

Bonjour,

J'ai un problème.
Je voudrai écrire une requête qui donne le MAX d'un COUNT... Comment faire ?

Merci

Pied de page des forums

Propulsé par FluxBB