我们有一个库(表库)。在那个图书馆里有很多架子(柱架)。在这些货架上可以是不同颜色的书(列颜色)。
任务:返回仅保留红皮书的书架数量。
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (1, '2', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (2, '2', 'white');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (3, '3', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (4, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (5, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (6, '2', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (7, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (8, '3', 'green');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (9, '1', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (10, '1', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (11, '5', 'green');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (12, '5', 'black');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (13, '6', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (14, '6', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (15, '6', 'white');
在上述情况下,它应仅返回4号货架。
答案 0 :(得分:4)
尝试此查询 -
SELECT shelf FROM test
GROUP BY shelf
HAVING COUNT(IF(color = 'red', 1, NULL)) = COUNT(*)
答案 1 :(得分:1)
这个会起作用:
select count(*) from (select distinct shelf from test where color='red') f;
内部查询(从test中选择不同的货架,其中color ='red')将返回包含红色书籍的不同货架编号:
2
3
4
6
然后我们搜索那些货架的数量(4)
答案 2 :(得分:0)
只有红色货架
INSERT INTO test (id, shelf, color) VALUES (1, '2', 'red');
INSERT INTO test (id, shelf, color) VALUES (2, '2', 'white');
INSERT INTO test (id, shelf, color) VALUES (3, '3', 'red');
INSERT INTO test (id, shelf, color) VALUES (4, '4', 'red');
INSERT INTO test (id, shelf, color) VALUES (5, '4', 'red');
INSERT INTO test (id, shelf, color) VALUES (6, '2', 'blue');
INSERT INTO test (id, shelf, color) VALUES (7, '4', 'red');
INSERT INTO test (id, shelf, color) VALUES (8, '3', 'green');
INSERT INTO test (id, shelf, color) VALUES (9, '1', 'blue');
INSERT INTO test (id, shelf, color) VALUES (10, '1', 'blue');
INSERT INTO test (id, shelf, color) VALUES (11, '5', 'green');
INSERT INTO test (id, shelf, color) VALUES (12, '5', 'black');
INSERT INTO test (id, shelf, color) VALUES (13, '6', 'red');
INSERT INTO test (id, shelf, color) VALUES (14, '6', 'red');
INSERT INTO test (id, shelf, color) VALUES (15, '6', 'white');
SELECT shelf
FROM test
WHERE color = 'red'
-- Uncomment the group by if you want a grouped result set
--GROUP BY shelf;
SELECT shelf, count(shelf)
FROM test
WHERE color = 'red'
GROUP BY shelf;
SELECT count(shelf)
FROM test
WHERE color = 'red'
答案 3 :(得分:0)
抱歉,起初没有得到你想要的东西。这会更好。
select distinct t1.shelf from test t1
where t1.color='red' and not
exists (select shelf from test where shelf=t1.shelf and color != 'red')
我们搜索上面有红色书籍且没有红色书籍的书架(存在子查询)