Pour récupérer diverses informations sur un matricule avion (c_mat) ET
le nombre d'avion du même "genre" (c_genre) dans une seule requête
MySql, j'ai fait une autojointure sur la même table comme suit :
SELECT A.c_mat AS matricule,
A.c_genre AS genre_avion,
... autres données ...
DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci,
A.c_legende AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY matricule
Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme
un doute sur cette « sémantique ».
Mes doutes sont-ils infondés ?
Merci.
Pour info, utilisé ici :
http://aviatechno.free.fr/constellation/suivi_matricule.php?mat=F-BAZH
pour afficher (x sur y)
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
P'tit Marcel
Dominique Ottello a écrit :
SELECT A.c_mat AS matricule, A.c_genre AS genre_avion, ... autres données ... DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci, A.c_legende AS legende, COUNT(B.c_mat) AS nb_avions FROM constel_afr AS A INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre WHERE A.c_mat = 'F-BAZE' GROUP BY matricule Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme un doute sur cette « sémantique ».
Tu as raison d'avoir des doutes: je pense que ça passera avec mysql qui est très tolérant mais pas avec d'autres sgbd. le problème: count ne peut coexister en sortie qu'avec d'autres fonctions de regroupement (min, max) ou avec les colonnes mentionnés dans le group by.
dans ton cas, je te suggère : (on suppose que c_mat est une clé unique de la table)
SELECT A.c_mat AS matricule, min(A.c_genre) AS genre_avion, ... autres données en min ... min(DATE_FORMAT(A.c_daci,'%d-%m-%Y')) AS daci, min(A.c_legende) AS legende, COUNT(B.c_mat) AS nb_avions FROM constel_afr AS A INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre WHERE A.c_mat = 'F-BAZE' GROUP BY A.c_mat
SELECT A.c_mat AS matricule,
A.c_genre AS genre_avion,
... autres données ...
DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci,
A.c_legende AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY matricule
Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme
un doute sur cette « sémantique ».
Tu as raison d'avoir des doutes: je pense que ça passera avec mysql qui
est très tolérant mais pas avec d'autres sgbd.
le problème: count ne peut coexister en sortie qu'avec d'autres
fonctions de regroupement (min, max) ou avec les colonnes mentionnés
dans le group by.
dans ton cas, je te suggère :
(on suppose que c_mat est une clé unique de la table)
SELECT A.c_mat AS matricule,
min(A.c_genre) AS genre_avion,
... autres données en min ...
min(DATE_FORMAT(A.c_daci,'%d-%m-%Y')) AS daci,
min(A.c_legende) AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY A.c_mat
eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
SELECT A.c_mat AS matricule, A.c_genre AS genre_avion, ... autres données ... DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci, A.c_legende AS legende, COUNT(B.c_mat) AS nb_avions FROM constel_afr AS A INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre WHERE A.c_mat = 'F-BAZE' GROUP BY matricule Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme un doute sur cette « sémantique ».
Tu as raison d'avoir des doutes: je pense que ça passera avec mysql qui est très tolérant mais pas avec d'autres sgbd. le problème: count ne peut coexister en sortie qu'avec d'autres fonctions de regroupement (min, max) ou avec les colonnes mentionnés dans le group by.
dans ton cas, je te suggère : (on suppose que c_mat est une clé unique de la table)
SELECT A.c_mat AS matricule, min(A.c_genre) AS genre_avion, ... autres données en min ... min(DATE_FORMAT(A.c_daci,'%d-%m-%Y')) AS daci, min(A.c_legende) AS legende, COUNT(B.c_mat) AS nb_avions FROM constel_afr AS A INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre WHERE A.c_mat = 'F-BAZE' GROUP BY A.c_mat