sql语句查询,根据一个表中一个列,该列在两个不同条件同时满足的查询结果
比如dollar表字段如下:idtypemoney1a1002b2003c3004d4005e500我想查询(typenotin(a)但sum(money)>=300)且...
比如dollar表字段如下:
id type money
1 a 100
2 b 200
3 c 300
4 d 400
5 e 500
我想查询(type not in(a)但sum(money)>=300 )且(type in(c,d)但sum(money)<300 )中所有的结果
我写的sql如下:执行时提示"关键字 'group' 附近有语法错误。",请教达人是哪里错了,正确是怎么写的。
select id from dallar
where type not in(a) group by id having sum(money)>=300
and type in(c,d) group by id having sum(money)<=300
可以肯定的是,我要查询的内容逻辑上是没问题的,只不过我写的查询sql:
select id from dallar
where type not in(a) group by id having sum(money)>=300
and type in(c,d) group by id having sum(money)<=300
(按照我的要求,最后一句应该是<300,而不是<=300)
-------------------------------------------------------------------------------------------
经本人实际验证,“落月Prc ”同学提供的解决sql是完全正确的,而“ytbelwxg ”同学提供的方案,一开始我也以为是正确的,但不知道为什么实际验证时确实不对,不知道“Union”这种语法是不是不能用在同一张表中还是别的原因,也希望有达人给出为什么不对的解释。 展开
id type money
1 a 100
2 b 200
3 c 300
4 d 400
5 e 500
我想查询(type not in(a)但sum(money)>=300 )且(type in(c,d)但sum(money)<300 )中所有的结果
我写的sql如下:执行时提示"关键字 'group' 附近有语法错误。",请教达人是哪里错了,正确是怎么写的。
select id from dallar
where type not in(a) group by id having sum(money)>=300
and type in(c,d) group by id having sum(money)<=300
可以肯定的是,我要查询的内容逻辑上是没问题的,只不过我写的查询sql:
select id from dallar
where type not in(a) group by id having sum(money)>=300
and type in(c,d) group by id having sum(money)<=300
(按照我的要求,最后一句应该是<300,而不是<=300)
-------------------------------------------------------------------------------------------
经本人实际验证,“落月Prc ”同学提供的解决sql是完全正确的,而“ytbelwxg ”同学提供的方案,一开始我也以为是正确的,但不知道为什么实际验证时确实不对,不知道“Union”这种语法是不是不能用在同一张表中还是别的原因,也希望有达人给出为什么不对的解释。 展开
8个回答
展开全部
以下语句完美解决!
SELECT id FROM dollar WHERE
id in(SELECT id FROM dollar WHERE type NOT IN('a') GROUP BY id HAVING SUM([money])>=300)
AND
id in(SELECT id FROM dollar WHERE type IN('c','d') GROUP BY id HAVING SUM([money])<=300)
一个SQL语句中,一个from最多只能对应一个group by,所以你的having,也只能有一个。
SELECT id FROM dollar WHERE
id in(SELECT id FROM dollar WHERE type NOT IN('a') GROUP BY id HAVING SUM([money])>=300)
AND
id in(SELECT id FROM dollar WHERE type IN('c','d') GROUP BY id HAVING SUM([money])<=300)
一个SQL语句中,一个from最多只能对应一个group by,所以你的having,也只能有一个。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按照你的逻辑sql应该这样
select id from dallar
where type not in('a') group by id having sum(money)>=300
INTERSECT
select id from dallar
where type in('c','d') group by id having sum(money)<300;
但是个人感觉你的逻辑有问题,
想查询(type not in(a)但sum(money)>=300 )且(type in(c,d)但sum(money)<300 )中所有的结果
那肯定只查的是type in(c,d) 但(sum(money)>=300 且sum(money)<300 )的了
select id from dallar
where type not in('a') group by id having sum(money)>=300
INTERSECT
select id from dallar
where type in('c','d') group by id having sum(money)<300;
但是个人感觉你的逻辑有问题,
想查询(type not in(a)但sum(money)>=300 )且(type in(c,d)但sum(money)<300 )中所有的结果
那肯定只查的是type in(c,d) 但(sum(money)>=300 且sum(money)<300 )的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的条件是自相矛盾的
type not in a,我选择b, sum(money) >=300,
type in b c, 我也选择b,但是要满足sum(money) <300,这样的结果永远是空集。
type not in a,我选择b, sum(money) >=300,
type in b c, 我也选择b,但是要满足sum(money) <300,这样的结果永远是空集。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Select Id
From Dallar
Where Type Not In (a)
Group By Id
Having Sum(Money) >= 300
Union
Select Id
From Dallar
Where Type In (c, d)
Group By Id
Having Sum(Money) <= 300
From Dallar
Where Type Not In (a)
Group By Id
Having Sum(Money) >= 300
Union
Select Id
From Dallar
Where Type In (c, d)
Group By Id
Having Sum(Money) <= 300
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询