3 votes

Requête SUM MySQL

Salutations, j'ai une requête avec laquelle je lutte, c'est la première fois que je rencontre ce type de requête. J'ai deux tables comme illustré ci-dessous.

xid est la clé primaire dans parent_tbl1, tandis que xid est la clé étrangère dans child_tbl2

parent_tbl1

xid pub 
1    1    
2    1    
3    0    
4    1

child_tbl2

id ttype fno xid  qnty
1  A       0    1    0
2  A       1    1    3
3  B       1    1    4
4  A       1    2    1  
5  A       1    3    2
6  A       1    4    3
7  A       1    4    1
8  A       1    1    1

Voici l'explication de la requête en parties, qui sera ensuite nécessaire pour constituer la requête complète.

J'ai besoin de la SOMME de qnty dans child_tbl2:

1) Dont le pub de parent est '1' Par conséquent, l'id 5 est éliminé de child_tbl2, car xid 3 est 0 dans parent_tbl1

Résultats: child_tbl2

id ttype fno xid qnty
1  A       0    1    0
2  A       1    1    3
3  B       1    1    4
4  A       1    2    1
6  A       1    4    3
7  A       1    4    1
8  A       1    1    1

2) ET dont la table parent a ttype 'A' dans la table child Par conséquent, l'id 3 est éliminé des résultats existants parce que le ttype de l'id 3 est B

Résultats: child_tbl2

id ttype fno xid qnty
1  A       0    1    0
2  A       1    1    3
4  A       1    2    1
6  A       1    4    3
7  A       1    4    1
8  A       1    1    1

3) ET dont le parent a '0' comme l'un de ses fno dans child_tbl2 Par conséquent, les id 4, 6 et 7 sont éliminés des résultats existants, car 0 n'a pas été trouvé dans l'un de leurs fno, alors que 0 a été trouvé comme l'un des fno de xid 1

Résultats: child_tbl2

id ttype fno xid qnty
1  A       0    1    0
2  A       1    1    3
8  A       1    1    1

La réponse à la requête devrait être 4

Voici ce que j'ai.

SELECT sum(child_tbl2.qnty), parent_tbl1.xid, parent_tbl1.pub, child_tbl2.ttype, child_tbl2.fno, child_tbl2.xid 
FROM parent_tbl1, child_tbl2
WHERE parent_tbl1.xid = child_tbl2.xid
AND parent_tbl1.pub = '1'
AND child_tbl2.ttype = 'A'

AND child_tbl2.fno ? 

Si c'est possible, je ne sais pas comment dire au système de gestion de base de données (MySQL) de vérifier si Zéro est l'un des fno. Si je dis "AND child_tbl2.fno = '0'", je dirais que le fno du résultat devrait être 0. Je ne veux pas ça, j'ai besoin que zéro soit l'un des fno pour que la requête SUM tous les qnty dans ce xid particulier

2voto

Ignacio Vazquez-Abrams Points 312628
SÉLECTIONNER SOMME(DISTINCT src.qnty) en tant que qnty
DEPUIS tbl2 COMME src
INNER JOIN tbl1 COMME pub
  SUR src.xid=pub.xid
INNER JOIN tbl2 COMME fno
  SUR pub.xid=fno.xid
OÙ pub.pub=1
  ET src.ttype='A'
  ET fno.fno=0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X