| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1569 人关注过本帖
标题:vfp9下select 列名中如果含有聚合函数时,但不要分组查询,为什么
取消只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:11 
vfp9下select 列名中如果含有聚合函数时,但不要分组查询,为什么
在VFP9下查询最高平均分的命令中:

SELECT name,xm,max(平均分) as zg FROM ls
为什么不能通过,提示要加group by
在VFP6下可行。
2015-05-12 11:48
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用sdta在2015-5-12 11:59:37的发言:

基础知识,看帮助文件。
在帮助文件中哪里?
2015-05-12 12:21
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
我不参加分组查询,只是在select 列名中用了聚合函数,为什么提示要group by
2015-05-12 12:29
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
如果要平均分的最大值的记录,就这样
SELECT a.* FROM ls a,(SELECT max(平均分) as 平均分 FROM ls) b WHERE a.平均分=b.平均分
上述代码的含义是咋样?

2015-05-12 14:53
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用taifu945在2015-5-12 14:58:40的发言:

子查询得出最大平均分值,父查询列出与最大平均分值有相同值的全部记录。
SELECT a.* FROM ls a,(SELECT max(平均分) as 平均分 FROM ls) b WHERE a.平均分=b.平均分
子查询得出最大平均分值,父查询列出与最大平均分值有相同值的全部记录。
我根据上述的含义:
把上述一条命令分二条
第一条:select * from ls
第二条是把子查询单独生成b库:SELECT max(平均分) as 平均分 FROM ls  b
然后把ls库与b库联接 select * from ls,b where ls.平均分=b.平均分。为什么还没有找出?出来的全部记录了
为什么分步走,二库关联不对?

[ 本帖最后由 sylknb 于 2015-5-12 15:41 编辑 ]
2015-05-12 15:26
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

select name,xm,max(平均分) from ls
此命令在VFP9不能运行,但虽然在vfp6下能运行,可不是正确答案,此人的平均分为0分。看来此命令是有缺陷的。


[ 本帖最后由 sylknb 于 2015-5-12 16:29 编辑 ]
2015-05-12 16:10
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用mywisdom88在2015-5-12 16:03:30的发言:

SELECT a.* FROM ls a,(SELECT max(平均分) as 平均分 FROM ls) b WHERE a.平均分=b.平均分
能不能等同
SELECT * FROM ls WHERE 平均分 IN (SELECT max(平均分) as 平均分 FROM ls) &&我没测试,不知道是不是这样
如果等同,2个语句,那个比较好? 区别在那里
 
上述二条都能出来正确的结果,第一条只能在VFP9下,第二条VFP9,VFP6下均能运行。
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-05-12 16:13
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用taifu945在2015-5-13 07:58:51的发言:

你仔细看看红色部分和蓝色部分:红色部分:是一个表达式,你并没有指定这个表达式的名字叫“平均分”,所以该表达式有个默认的名字,但肯定不是“平均分”;蓝色部分,你说单独生成B库(表文件)。但你在蓝色部分的表达中是告诉FoxPro,查询Ls表时,用“b”作为其别名,而不是把查询结果生成B表。这个情况说明你对SELECT-SQL语句的基本语法都没掌握好。由于上述两个原因,导致你最后一条命令无法实现你的预期。
我写错了:
应是:SELECT max(平均分) as 平均分 FROM ls into table b
   select a.* from ls as a,b where a.平均分=b.平均分
2015-05-13 08:48
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
在窗口命令中输入二个查询命令并运行,产生如此以下2个的结果,为什么?请指教!
1)SELECT max(平均分) as 平均分 FROM ls into table b
 select a.* from ls as a,b where a.平均分=b.平均分
2.rar (41.79 KB)



如果改为如此
2)SELECT max(平均分) as 平均分 FROM ls into table b
 clear all
select a.* from ls as a,b where a.平均分=b.平均分
3.rar (14.5 KB)


[ 本帖最后由 sylknb 于 2015-5-13 10:53 编辑 ]
2015-05-13 10:48
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用mywisdom88在2015-5-13 11:47:00的发言:

出现什么结果
请见2个压缩文件
2015-05-13 14:19
快速回复:vfp9下select 列名中如果含有聚合函数时,但不要分组查询,为什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040116 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved