Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Sql 如果一列可能有许多相同的值,但其所有第二列都有相同的值,如何选择不同的行?_Sql_Mysql - Fatal编程技术网

Sql 如果一列可能有许多相同的值,但其所有第二列都有相同的值,如何选择不同的行?

Sql 如果一列可能有许多相同的值,但其所有第二列都有相同的值,如何选择不同的行?,sql,mysql,Sql,Mysql,我有一张表格,格式如下: test_name | test_result ----------------------- test1 | pass test2 | fail test1 | pass test1 | pass test2 | pass test1 | pass test3 | pass test3 | fail test3 | pass 正如您可以看到的,所有tes

我有一张表格,格式如下:

test_name | test_result
-----------------------
test1     | pass 
test2     | fail 
test1     | pass   
test1     | pass   
test2     | pass   
test1     | pass   
test3     | pass   
test3     | fail   
test3     | pass 
正如您可以看到的,所有test1都通过了测试,而test2和test3都通过了测试并失败了


是否有SQL语句可用于返回仅通过的测试的不同名称?例如,test1

这可能不是最简单的方法(我倾向于滥用子查询),但您可以:

SELECT test_name FROM tests AS a WHERE NOT EXISTS (SELECT test_name FROM tests AS b WHERE a.test_name = b.test_name AND test_result != 'pass') GROUP BY test_name;

这可能不是最简单的方法(我倾向于滥用子查询),但您可以这样做:

SELECT test_name FROM tests AS a WHERE NOT EXISTS (SELECT test_name FROM tests AS b WHERE a.test_name = b.test_name AND test_result != 'pass') GROUP BY test_name;

您可以按测试名称分组,计算通过次数,并检查其是否与组中的行数相同

SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'pass') = COUNT(*)
或者,计算失败次数并检查是否为零:

SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'fail') = 0
结果:

test1
测试数据:

CREATE TABLE table1 (test_name NVARCHAR(100) NOT NULL, test_result NVARCHAR(100) NOT NULL);
INSERT INTO table1 (test_name, test_result) VALUES
('test1', 'pass'),
('test2', 'fail'),
('test1', 'pass'),
('test1', 'pass'),
('test2', 'pass'),
('test1', 'pass'),
('test3', 'pass'),
('test3', 'fail'),
('test3', 'pass');

您可以按测试名称分组,计算通过次数,并检查其是否与组中的行数相同

SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'pass') = COUNT(*)
或者,计算失败次数并检查是否为零:

SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'fail') = 0
结果:

test1
测试数据:

CREATE TABLE table1 (test_name NVARCHAR(100) NOT NULL, test_result NVARCHAR(100) NOT NULL);
INSERT INTO table1 (test_name, test_result) VALUES
('test1', 'pass'),
('test2', 'fail'),
('test1', 'pass'),
('test1', 'pass'),
('test2', 'pass'),
('test1', 'pass'),
('test3', 'pass'),
('test3', 'fail'),
('test3', 'pass');
我从来没有意识到
SUM()
可以接受一个条件;我从来没有意识到
SUM()
可以接受一个条件;美好的