gpt4 book ai didi

sql - GROUP BY HAVING NOT不会产生错误的结果

转载 作者:行者123 更新时间:2023-12-03 17:58:22 25 4
gpt4 key购买 nike

我在SQLite数据库上运行GROUP BY并具有NOT查询,但是发现这并不排除包含NOT的组,而不仅仅是行。下面的例子:

-- Create sample db
CREATE TABLE sample(Year INT, Var INT);
-- Generate data
INSERT INTO sample (Year, Var)
VALUES (2005, 1);
INSERT INTO sample (Year, Var)
VALUES (2005, 3);
INSERT INTO sample (Year, Var)
VALUES (2006, 2);
INSERT INTO sample (Year, Var)
VALUES (2006, 3);
INSERT INTO sample (Year, Var)
VALUES (2007, 1);
INSERT INTO sample (Year, Var)
VALUES (2007, 2);


如果我运行以下查询,则仅返回组2005和2007,因为它们是唯一包含1的组:

SELECT * FROM sample
GROUP BY Year, Var
HAVING Var = 1


如果我更改此查询以排除包含1的组,则会返回所有组(即使是包含1的组),但不会返回包含1的行。

SELECT * FROM sample
GROUP BY Year, Var
HAVING Var != 1


从本质上讲,HAVING子句现在看起来像WHERE子句。应该发生的是上述两个查询应该生成相反的结果,即第一个查询仅选择2005年和2007年,第二个查询仅选择2006年。

我的问题是我该如何选择仅不包含Var列中给定值的组,而上述是我应提交的错误?

因此,我希望/期望第二个查询仅返回group / Year 2006,因为它是唯一不包含Var 1的查询。

最佳答案

下面的查询将为您提供结果:

SELECT * FROM sample
WHERE VAR !=1
GROUP BY Year, Var


但是,您也可以使用,

SELECT * FROM SAMPLE WHERE VAR !=1


因为group by对指定的表和查询没有意义。

FIDDLE here用于两个查询。



编辑:

这会帮到你。在更新的 FIDDLE中引用第3个查询

SELECT * FROM SAMPLE
WHERE YEAR NOT IN
(
SELECT YEAR FROM SAMPLE WHERE VAR=1
)

关于sql - GROUP BY HAVING NOT不会产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25135142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com