J'ai les tableaux suivants produits et tests.Joindre deux tables et compter, éviter zéro si l'enregistrement n'est pas disponible dans la deuxième table
select id,pname from products;
+----+---------+
| id | pname |
+----+---------+
| 1 | prd1 |
| 2 | prd2 |
| 3 | prd3 |
| 4 | prd4 |
+----+---------+
select pname,testrunid,testresult,time from tests;
+--------+-----------+------------+-------------+
| pname | testrunid | testresult | time |
+--------+-----------+------------+-------------+
| prd1 | 800 | PASS | 2017-10-02 |
| prd1 | 801 | FAIL | 2017-10-16 |
| prd1 | 802 | PASS | 2017-10-02 |
| prd1 | 803 | NULL | 2017-10-16 |
| prd1 | 804 | PASS | 2017-10-16 |
| prd1 | 805 | PASS | 2017-10-16 |
| prd1 | 806 | PASS | 2017-10-16 |
+--------+-----------+------------+-------------+
J'aime compter les résultats des tests pour les produits et s'il n'y a pas de résultat disponible, pour un produit juste montrer un zéro pour elle. quelque chose comme tableau suivant:
+--------+------------+-----------+----------------+---------------+
| pname | total_pass | total_fail| pass_lastweek | fail_lastweek |
+--------+------------+-----------+----------------+---------------+
| prd1 | 5 | 1 | 3 | 1 |
| prd2 | 0 | 0 | 0 | 0 |
| prd3 | 0 | 0 | 0 | 0 |
| prd4 | 0 | 0 | 0 | 0 |
+--------+------------+-----------+----------------++--------------+
J'ai essayé différentes questions comme suit, qui travaille pour un seul produit et est incomplet:
SELECT pname, count(*) as pass_lastweek FROM tests where testresult = 'PASS' AND time
>= '2017-10-11' and pname in (select pname from products) group by pname;
+-------------+---------------+
| pname | pass_lastweek |
+-------------+---------------+
| prd1 | 3 |
+-------------+---------------+
il semble si fondamental mais je ne suis pas capable de l'écrire , une idée?
PName ne serait pas une colonne dans une table de test conçue de manière sensée. Au-delà de cela, c'est incroyablement basique et serait entièrement abordé dans n'importe quel livre d'introduction ou tutoriel de base. – Strawberry
'SELECT a.pname, b.testrunid FROM produits comme A LEFT JOIN tests comme B sur a.pname = b.pname où b.testresulty = 'PASS' et b.time> = '2017-10-11' et le groupe par a.pname' – parkway