Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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中特定字段中具有相同值的行分组_Mysql_Sql_Group By - Fatal编程技术网

将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 | |

我在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 |
+--------+----------+------+
我想知道,如果所有“完成”字段都标记为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