Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:countif和Group By_Mysql - Fatal编程技术网

MySQL:countif和Group By

MySQL:countif和Group By,mysql,Mysql,我有以下mysql表测试结果 | ID | Test_ID | Device_OS| Status | Date | | 1 | 1 | Android | passed | 2015/10 | | 2 | 1 | Android | failed | 2015/10 | | 3 | 15 | iOS | passed | 2015/11 | | 4 | 20 | Android | passed | 2015/11 |

我有以下mysql表测试结果

| ID | Test_ID | Device_OS| Status | Date    |
| 1  | 1       | Android  | passed | 2015/10 |
| 2  | 1       | Android  | failed | 2015/10 |
| 3  | 15      | iOS      | passed | 2015/11 |
| 4  | 20      | Android  | passed | 2015/11 |
| 5  | 27      | Android  | passed | 2015/11 |
| 6  | 10      | iOS      | failed | 2015/12 |
| 7  | 5       | Android  | passed | 2015/12 |
我需要按月计算每个操作系统和组的唯一测试ID的数量。 我编写了一个查询,计算唯一测试的一般数量:

SELECT Run_Date, COUNT(DISTINCT Test_ID) FROM Test_Results
GROUP BY MONTH(Run_Date)
ORDER BY Run_Date DESC;
但我想不出如何突破Deivce_OS。 结果会是这样的:

Run_Date    COUNT Android iOS
12/10/2015  3650  3650    2500
11/5/2015   1909  1909    1900
10/1/2015   1667  1667    1325
SELECT YEAR(Run_Date), MONTH(Run_Date), COUNT(DISTINCT Test_ID),
       SUM(Device_OS = 'Android') as Android, SUM(Device_OS = 'iOS') as iOS
FROM Test_Results
GROUP BY YEAR(Run_Date), MONTH(RUn_Date)
ORDER BY YEAR(Run_Date) DESC, MONTH(RUn_Date) DESC;

谢谢大家!

首先,你不应该在没有年份的情况下按月分组——除非你真的、真的打算这样做。其次,您应该养成只使用
选择
组中的
表达式的习惯

第三,我认为您只需要条件聚合,如下所示:

Run_Date    COUNT Android iOS
12/10/2015  3650  3650    2500
11/5/2015   1909  1909    1900
10/1/2015   1667  1667    1325
SELECT YEAR(Run_Date), MONTH(Run_Date), COUNT(DISTINCT Test_ID),
       SUM(Device_OS = 'Android') as Android, SUM(Device_OS = 'iOS') as iOS
FROM Test_Results
GROUP BY YEAR(Run_Date), MONTH(RUn_Date)
ORDER BY YEAR(Run_Date) DESC, MONTH(RUn_Date) DESC;
编辑:

我注意到您希望每个月对操作系统进行唯一的测试。为此,请有条件地使用
COUNT(DISTINCT)

SELECT YEAR(Run_Date), MONTH(Run_Date), COUNT(DISTINCT Test_ID),
       COUNT(DISTINCT CASE WHEN Device_OS = 'Android' THEN Test_ID END) as Android,
       COUNT(DISTINCT CASE WHEN Device_OS = 'iOS' THEN Test_ID END) as iOS
FROM Test_Results
GROUP BY YEAR(Run_Date), MONTH(RUn_Date)
ORDER BY YEAR(Run_Date) DESC, MONTH(RUn_Date) DESC;

谢谢你的解释!