Trouver les plus fréquents sur plusieurs champs et plusieurs tables

[Résolu]
Signaler
Messages postés
25
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 juillet 2007
-
Messages postés
25
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 juillet 2007
-
Bonjour,
j'ai une bdd qui permet de stocker des informations issue d'une ordonnance médicale.
 J'ai deux étape dans mon ordonnance et une table pour chaque étape.
A chaque étape on peut renseigner un deux ou trois antibiotiques prescrits, qui se traduise dans chaque table par trois champs différents, mais dans lesquels on rentre la même information (un nom d'antibiotique) (champs : antibio1, antibio2, antibio3)

 Je cherche à savoir quel sont les trois antibiotiques qui reviennent le plus souvent, ma recherche doit s'effectuer sur chacun des trois champs des deux tables (donc six champs en tout). Comment puis-je faire ?
 avec une requête de la forme :
SELECT

antibio1
,
COUNT(*)
AS A11

FROM etape1

WHERE antibio1
<>
''
GROUP
BY antibio1

ORDER
BY A11
DESC

j'arrive à trier les antibiotiques par ordre d'occurence decroissante, mais seulement sur un seul champ, comment pourrais-je faire pour avoir le même résultat mais sur mes six champs confondus ?
 Merci d'avance
Quentin

6 réponses

Messages postés
25
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 juillet 2007

Renfield,
après exploitation de toutes tes propositions, voici la solution qui fonctionne à laquelle j'arrive.






SELECT






TOP
3 Antibiotique

,



COUNT
(*)



AS
Nombre


FROM

(

SELECT
antibio1

AS
Antibiotique

FROM
etape1

WHERE
antibio1

<>



''





UNION



ALL

SELECT
antibio2

AS
Antibiotique

FROM
etape1

WHERE
antibio2

<>



''





UNION



ALL

SELECT
antibio3

AS
Antibiotique

FROM
etape1

WHERE
antibio3

<>



''





UNION



ALL

SELECT
antibio1

AS
Antibiotique

FROM
etape2

WHERE
antibio1

<>



''





UNION



ALL

SELECT
antibio2

AS
Antibiotique

FROM
etape2

WHERE
antibio2

<>



''





UNION



ALL

SELECT
antibio3

AS
Antibiotique

FROM
etape2

WHERE
antibio3

<>



''





)
T2


WHERE
T2

.
Antibiotique

<>



''

GROUP



BY
Antibiotique


ORDER



BY
Nombre

DESC

Ne pas oublier le UNION ALL et pas UNION tout seul, sinon il suprime les doublons, et du coup on peux toujours s'amuser à compter...
Merci encore de ton aide
Quentin
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
je pense à un
SELECT antibio1 FROM etape1
UNION
SELECT antibio2 FROM etape1
UNION
SELECT antibio3 FROM etape1

pour récupérer une liste contigüe des trois champs

ensuite, tu appliques dessus ton group by, ton order by, et tu ajoutes un TOP 3 pour ne garder que le trio de tete
Messages postés
25
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 juillet 2007

Merci de ta réponse aussi prompte,
le coup du UNION je ne savais pas que cela existait, et c'est vrai que c'est pratique...il me reste quelques problèmes cependant : je n'arrive pas à appliquer mon COUNT et mon GROUP et mon ORDER à ma selection :
 j'ai essayé un truc comme ça :
SELECT

antibio
,
COUNT(*)
AS nbre_antibio

WHERE
antibio
IN(

SELECT antibio1
FROM etape1
WHERE antibio1
<>
''

UNION
SELECT antibio2
FROM etape1
WHERE antibio2
<>
''
UNION
SELECT antibio3
FROM etape1
WHERE antibio3
<>
'')
GROUP
BY antibio

RDER
BY nbre_antibio
DESC

Sachant que antibio ne désigne aucun champ dans ma table...donc de cette requête il ne veux pas...
d'autre part, en essayant juste
SELECT antibio1 FROM etape1 WHERE antibio1 <>''
UNIONSELECT antibio2 FROM etape1 WHERE antibio2 <>
''
UNIONSELECT antibio3 FROM etape1 WHERE antibio3 <>'')

Il me selectionne bien tous mes antibiotiques qui figurent dans mes trois champs, mais il ne m'enlève automatiquement les doublons, et ça c'est embêtant si je veux les compter...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
au pire, tu dois pouvoir faire ca ailleurs que dans une requete...

SELECT COUNT(0) FROM etape1 WHERE Antibio1 xxx OR Antibio2 xxx Or antibio3 = xxx
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
couplé avec la liste des médicaments :

SELECT DISTINCT Antibio1 FROM
(
SELECT Antibio1 FROM etape1
UNION
SELECT Antibio2 FROM etape1
UNION
SELECT Antibio3 FROM etape1
)
WHERE Antibio1<>''
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
j'ai trouvé a combiner les deux...

SELECT T2.Antibiotique, COUNT(0) As Nombre FROM etape1 T1,
(SELECT DISTINCT Antibiotique FROM
(
SELECT Antibio1 As Antibiotique FROM etape1
UNION
SELECT Antibio2 FROM etape1
UNION
SELECT Antibio3 FROM etape1
)
WHERE Antibiotique<>'') T2
WHERE T1.Antibio1 T2.Antibiotique OR T1.Antibio2 T2.Antibiotique OR T1.Antibio3 = T2.Antibiotique
GROUP BY T2.Antibiotique
ORDER BY COUNT(0) DESC