我有以下表格产品和测试。加入两个表并计数,如果第二个表中不存在记录,则避免为零
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 |
+--------+-----------+------------+-------------+
我喜欢统计产品的测试结果,如果没有可用的结果,产品只显示为零。像下表:
+--------+------------+-----------+----------------+---------------+
| 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 |
+--------+------------+-----------+----------------++--------------+
我试图像下面,这是刚刚工作的一个产品和不同的查询是不完整的:
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 |
+-------------+---------------+
它看起来如此基本的,但我仍不能写, 任何想法?
PNAME不会是任何明智设计的测试表中的列。除此之外,这是非常基础的,并将在任何基础的入门书籍或教程中得到彻底解决。 – Strawberry
'SELECT a.pname,b.testrunid FROM products as a LEFT JOIN test as B on a.pname = b.pname where b.testresulty ='PASS'and b.time> ='2017-10-11'and group通过a.pname' – parkway