将MySQL中特定字段中具有相同值的行分组

use*_*907 5 mysql sql group-by

我在MySQL表中有以下数据.

+--------+----------+------+
| job_id | query_id | done |
+--------+----------+------+
|  15145 | a002     |    1 |
|  15146 | a002     |    1 |
|  15148 | a002     |    1 |
|  15150 | a002     |    1 |
|  15314 | a003     |    0 |
|  15315 | a003     |    1 |
|  15316 | a003     |    0 |
|  15317 | a003     |    0 |
|  15318 | a003     |    1 |
|  15319 | a003     |    0 |
+--------+----------+------+
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能有一个SQL查询,可以通过query_id进行分组,如果所有'完成'字段都标记为1.我想象的可能输出是:

+----------+------+
| query_id | done |
+----------+------+
|  a002    |  1   |
|  a003    |  0   |
+----------+------+
Run Code Online (Sandbox Code Playgroud)

我尝试了以下SQL查询:

select job_id, query_id, done from job_table group by done having done = 1 ;
Run Code Online (Sandbox Code Playgroud)

但没有运气.我真的很感激任何帮助!

Bog*_*SFT 7

我对这个解决方案并不是特别自豪,因为它不是很清晰,但至少它快速且简单。如果所有项目均已“完成”= 1,则总和将等于计数 SUM = COUNT

SELECT query_id, SUM(done) AS doneSum, COUNT(done) AS doneCnt 
FROM tbl 
GROUP BY query_id
Run Code Online (Sandbox Code Playgroud)

如果你添加一个having子句,你就会得到“完成”的项目。

HAVING doneSum = doneCnt
Run Code Online (Sandbox Code Playgroud)

我会让你正确格式化解决方案,你可以做一个差异来获取“未完成”的项目或doneSum<>doneCnt。

顺便说一句,SQL在这里摆弄。