有一个SQL查询语句请教(讨论)

lastbelial 2004-11-24 10:42:39
有一数据库,求每一个人number字段的最大值,并列出其ID号。
id1 name1 number
1 a 88
2 b 91
3 c 45
4 a 90
5 b 78
6 b 67
7 c 70
8 c 90
9 a 92
10 c 55
11 a 50

如果我用:sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(kk) as maxkk from d:\表1.dbf b where b.name1=a.name1) 可以得出正确结果。

但如果我用sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(kk) as maxkk from d:\表1.dbf b group by b.name1)
得出错误结果:
ID1 NAME1 NUMBER
2 B 91
4 A 90
8 C 90
9 A 92

为什么我作分组查询会出错呢?这条题目是我在主页“数据库”专题中看到的。当时文章上写的是:
sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(kk) as maxkk from d:\表1.dbf b group by b.name1 where b.name1=a.name1)
运行提示出错。

请高手指教一二。谢谢

...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lastbelial 2004-11-26
  • 打赏
  • 举报
回复
TO winket0713(天之子) AND fj_jiangqi(强盗) :
如果用:sele s_id,s_name,max(s_score) from 表2 group by s_name 求出的ID号不正确,它只是数据中每个名字最后一次出现的ID号.
fj_jiangqi(强盗) :
您第二句出错.您好运行试试.
winket0713 2004-11-26
  • 打赏
  • 举报
回复
fj_jiangqi(强盗)大哥说的这个方法我支持!
sele s_id,s_name,max(s_score) from 表2 group by s_name
这个可以实现你说的要求!
fj_jiangqi 2004-11-26
  • 打赏
  • 举报
回复
唉,我没法试。那只是一种方法,但愿你能够明白。
也许你只能用类似那种方法才能实现。其它方法有的会更麻烦我就不说了,有的也许楼下还会有人知道。
-----------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
我在死亡线上苦苦挣扎-度日如年
LAIYANGPJ 2004-11-25
  • 打赏
  • 举报
回复
这个结果没有错.只是与你想的不一样.
你要是把所有的A的NUMBER都改成90,B......91,C.......92那更不是你想要的结果了.
它会显出所有的记录.
fj_jiangqi 2004-11-25
  • 打赏
  • 举报
回复
哪一句有错?是语法错,还是?
-----------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
我在死亡线上苦苦挣扎-度日如年
lastbelial 2004-11-25
  • 打赏
  • 举报
回复
to fj_jiangqi(强盗) :
您的语句有错误。

TO xclzteb(浪子) :
对不起:max(kk) 应该是max(number)。
但我说过 sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(number) as maxkk from d:\表1.dbf b group by b.name1 where b.name1=a.name1) 仍是提示group by 子句出错。您说的“把主键取出来作为连接字段就可以了。”如何实现呢?
lastbelial 2004-11-25
  • 打赏
  • 举报
回复
另,如果SELE语句不用别名的话不会报GROUP BY 子句有问题.但得出的结果是和
sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(kk) as maxkk from d:\表1.dbf b group by b.name1)
一样.结果错误.
lastbelial 2004-11-25
  • 打赏
  • 举报
回复
to :msd88(七色) where a.kk 不会报错!为什么要逻辑型字段呢?
TO : fj_jiangqi(强盗) 语句中 sele max(kk) KK前面没有加别名,但我改成 sele max(b.kk) 仍会报GROUP BY 子句有问题.
xclzteb 2004-11-25
  • 打赏
  • 举报
回复
但如果我用sele a.id1,a.name1,a.kk from d:\表1.dbf a where a.kk in (sele max(kk) as maxkk from d:\表1.dbf b group by b.name1)

你这个没有把主键取出来当然要错了。把主键取出来作为连接字段就可以了。
xclzteb 2004-11-25
  • 打赏
  • 举报
回复
你的KK是从哪里冒出来的,应该是“number”吧。把整个代码帖出来看看。
fj_jiangqi 2004-11-25
  • 打赏
  • 举报
回复
昨天没看清你的问题,刚才发现原来只是一个表。
select name1,max(number) from tabel1.dbf group by name1
这是简单的写法,少了显示id字段,不知是不是能满足你的需要。
select a.* from tabel1.dbf a,(select name1,max(number) as maxkk from tabel1.dbf group by name1) b where a.name1=b.name1 and a.number=b.maxkk
这是可以显示id字段的
以上方法未经测试,仅供参考!
-----------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
我在死亡线上苦苦挣扎-度日如年
fj_jiangqi 2004-11-24
  • 打赏
  • 举报
回复
sele max(kk) as maxkk from d:\表1.dbf b group by b.name1 where b.name1=a.name1
这个是in中的语句,其中没有别名a的存在,还有kk最好要再注明是那个别名里的字段。
-----------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
我在死亡线上苦苦挣扎-度日如年
msd88 2004-11-24
  • 打赏
  • 举报
回复
a.kk应该不是逻辑型字段吧,那么where a.kk好象就不对了,恐怕会报错

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧