回 帖 发 新 帖 刷新版面

主题:请教两道很难的SQL查询题(我不懂当然认为很难了)

[b]问题一:[/b]

有表如下
create table table1(a int, b int)

假设有这样一个查询
select a*a as aa, b*b as bb, a*a*b*b as aabb from table1

此时我希望能提高效率,因此我试图使用
select a*a as aa, b*b as bb, aa*bb as aabb from table1

但告失败,请问有没有好方法

[b]问题二:[/b]


有表如下
create table table1(a int, b int)

并有查询询句
select max(b) from table1

字段b不是主键也没建索引,且在查询前已知最大值为10,我希望在扫描到列b的值为10时不用再遍历剩余行则能够自动终止查询并返回结果

请赐教,联系QQ:10342713 (艾) 谢谢![em2]

回复列表 (共6个回复)

沙发

此时我希望能提高效率,因此我试图使用
select a*a as aa, b*b as bb, aa*bb as aabb from table1

这个失败的原因很简单,表里没有,可以做一个临时表存放aa和bb
第二个你直接a=10算了,既然知道最大还要什么遍历
既然遍历了又要指定最大。。。

板凳

只能说是个人观点
一:因为你是from table1来查询的,而aa,bb字段是不存在的,所以报错
二:select max(b) from table1(返回最大值) 你的这个最大值已知的情况下,这条语句我觉得没有必要做啦.或者
select * from table b=10就可

3 楼

1:aa bb 当时还不存在,所以报错
2:select max(b) from table1 在已知到最大值的情况下还返回最大值干吗?
要做判定的话直接select * from table1 where b=10

4 楼


我知道最大值不会超过10,但可能最大值为6呢?
select * from table1 where b=10
不能返回我要的结果呀

还有
select a*a as aa, b*b as bb, a*a*b*b as aabb from table1
当然知道aa,bb是不存在,但我不希望后面的值能直接通过aa,bb求出,而不希望再计算一次,提出这个问题是因为在执行Group By时对有很重要的运用
比如语句
select ab from (select a+b as ab from table1) as table2 group by ab
如何改可以使之不用嵌套查询呢?

5 楼

我试过(MSSQL)
select a+b, count(a+b) from table1 group by a+b
竟然通过了,有点不解,难道是SQL优化的结果?

6 楼

或许本来就可以的只是我们不知道而已

我来回复

您尚未登录,请登录后再回复。点此登录或注册