如果我理解正确,您不想要全白或全黑的品种。你只想要白色和黑色的品种(可卡犬的不同颜色)。基于此,这就是我想出的(尽管它可能不是最有效的)。
DECLARE @pets TABLE(
id INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
breed VARCHAR(20) NOT NULL,
color VARCHAR(20) NOT NULL,
weight INTEGER NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO @pets VALUES (1, 'jeff', 'breed1', 'black', 20)
INSERT INTO @pets VALUES (2, 'larry', 'breed1', 'white', 20)
INSERT INTO @pets VALUES (3, 'bob', 'breed2', 'black', 30)
INSERT INTO @pets VALUES (4, 'kevin', 'breed3', 'black', 30)
INSERT INTO @pets VALUES (5, 'jerry', 'breed3', 'white', 30)
DECLARE @breed VARCHAR(50)
SET @breed = 'breed1'
;WITH cte (color) AS (SELECT DISTINCT color FROM @pets WHERE breed = @breed)
SELECT breed, COUNT(id) FROM @pets WHERE color IN (SELECT color FROM cte)
AND breed != @breed
GROUP BY breed
HAVING COUNT(id) >= (SELECT COUNT(*) FROM cte)
Result: breed3
如果您使用的 SQL 版本不支持 CTE,则可以使用临时表或表变量来保存您需要在其他品种中寻找的颜色。希望这会有所帮助!