将MySQL中特定字段中具有相同值的行分组
我在MySQL表中有以下数据将MySQL中特定字段中具有相同值的行分组,mysql,sql,group-by,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 | |
+--------+----------+------+
| 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 |
+--------+----------+------+
我想知道,如果所有“完成”字段都标记为1,是否可以使用sql查询,该查询可以按查询id进行分组。我认为可能的结果是:
+----------+------+
| query_id | done |
+----------+------+
| a002 | 1 |
| a003 | 0 |
+----------+------+
我尝试了以下SQL查询:
select job_id, query_id, done from job_table group by done having done = 1 ;
但是没有运气。我真的非常感谢你的帮助 我想你应该看看这个
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
试试像这样的东西
SELECT qry_id, 1
FROM (
SELECT qry_id, done
FROM tbl
GROUP BY qry_id, done
) AS t
GROUP BY qry_id
HAVING COUNT(*)=1
UNION
SELECT qry_id, 0
FROM (
SELECT qry_id, done
FROM tbl
GROUP BY qry_id, done
) AS t
GROUP BY qry_id
HAVING COUNT(*)>1
我并不特别为这个解决方案感到自豪,因为它不是很清楚,但至少它是快速和简单的。如果所有项目的“完成”=1,则总和将等于计数总和=计数
SELECT query_id, SUM(done) AS doneSum, COUNT(done) AS doneCnt
FROM tbl
GROUP BY query_id
如果您添加having子句,那么您将得到“done”项
我会让你正确格式化解决方案,你可以做一个差异来获得“未完成”项或doneSum doneCnt
顺便说一句,SQL fiddle.所有“完成”作业:
所有“撤消”作业:
具有相同值的所有作业(“完成”或“撤消”):
示例中的输出可通过以下方式获得:
SELECT query_id, min(done) as done
FROM job_table
GROUP by done
非常感谢。但是查询id都显示“0”,而不是“1”和“0”
SELECT * FROM job_table GROUP BY done HAVING MIN(done) = 1;
SELECT * FROM job_table GROUP BY done HAVING MAX(done) = 0;
SELECT * FROM job_table GROUP BY done HAVING MAX(done) = 0 OR MIN(done) = 1;
SELECT query_id, min(done) as done
FROM job_table
GROUP by done