Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007
-
3 juil. 2007 à 15:55
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007
-
4 juil. 2007 à 10:45
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
A voir également:
Trouver les plus fréquents sur plusieurs champs et plusieurs tables
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007 4 juil. 2007 à 10:45
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
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007 3 juil. 2007 à 16:59
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...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 3 juil. 2007 à 17:36
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