免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2015 | 回复: 4

请教一个简单的SQL查询的问题 [复制链接]

论坛徽章:
0
发表于 2003-01-18 13:41 |显示全部楼层
+----+----------+--------------+----------+----+----+
| id | xh       | xq           | kc       | cj | lb |
+----+----------+--------------+----------+----+----+
|  1 | 00520113 | 2002-2003(1) | computer | 59 | 1  |
|  2 | 00520113 | 2002-2003(1) | VFP      | 55 | 2  |
|  3 | 00520113 | 2002-2003(1) | VFP      | 67 | 3  |
|  4 | 00520113 | 2002-2003(1) | computer | 80 | 2  |
|  5 | 02510322 | 2002-2003(1) | VFP      | 65 | 1  |
|  6 | 02510322 | 2002-2003(1) | VFP      | 67 | 3  |
+----+----------+--------------+----------+----+----+

有类似上面的这样一张叫作CJ数据表,xh为学号,xq为学期,kc为课程名称,cj为成绩,lb为考试类别(如期考,补考等).我现在想要把里面的同一个学号,同一学期内同一门课的最高成绩查询出来,并且要返回考试类别(或返回整条记录)如我需要的结果是:
+----+----------+--------------+----------+----+----+
| id | xh       | xq           | kc       | cj | lb |
+----+----------+--------------+----------+----+----+
|  3 | 00520113 | 2002-2003(1) | VFP      | 67 | 3  |
|  4 | 00520113 | 2002-2003(1) | computer | 80 | 2  |
|  6 | 02510322 | 2002-2003(1) | VFP      | 67 | 3  |
+----+----------+--------------+----------+----+----+

我用select max(cj) from CJ group by xh,xq,kc可以找出每个人,第个学期,每门课的最高成绩,但是得不到LB字段,我就不知道这成绩是期末考试成绩还是补考成绩或是别的.

请问能不能用SQL语句一次性返回我需要的结果呢?

谢谢大家.

论坛徽章:
0
发表于 2003-01-18 18:18 |显示全部楼层

请教一个简单的SQL查询的问题

呵呵!不知这样合不合要求?
SQL>; select max(id) id,xh,xq,kc,max(cj) cj,max(ib) ib from cj group by xh,xq,kc;

        ID XH       XQ            KC                   CJ         IB
---------- -------- ------------- ------------ ---------- ----------
         3 00520113 2002-2003(1)  VFP                  67          3
         4 00520113 2002-2003(1)  computer             80          2
         6 02510322 2002-2003(1)  VFP                  67          3

论坛徽章:
0
发表于 2003-01-18 22:34 |显示全部楼层

请教一个简单的SQL查询的问题

首先谢谢pydwh的回答.

原帖由 "pydwh" 发表:
呵呵!不知这样合不合要求?
SQL>; select max(id) id,xh,xq,kc,max(cj) cj,max(ib) ib from cj group by xh,xq,kc;

        ID XH       XQ            KC                   CJ         IB
---------- ----..........


这个查询还不行,是这样的,并不是ID越大,CJ就越大,LB也是这样,这里面只有CJ可以用MAX(),LB只是个字符串

论坛徽章:
0
发表于 2003-01-19 00:56 |显示全部楼层

请教一个简单的SQL查询的问题

呵呵!你说的没错。下面这种方法行不行呢?

  1. SQL>; select * from cj;

  2.         ID XH       XQ            KC                           CJ LB

  3. ---------- -------- ------------- -------------------- ---------- -
  4.          1 00520113 2002-2003(1)  computer                 95 1
  5.          2 00520113 2002-2003(1)  VFP                          75 2
  6.          3 00520113 2002-2003(1)  VFP                          67 3
  7.          4 00520113 2002-2003(1)  computer                 80 2
  8.          5 02510322 2002-2003(1)  VFP                          89 1
  9.          6 02510322 2002-2003(1)  VFP                          67 3

  10. 已选择6行。

  11. SQL>; select x.id,x.xh,x.xq,x.kc,x.cj,x.lb from cj x join (select xh,xq,kc,max(cj) cj
  12.   2      from cj group by xh,xq,kc) y on x.cj=y.cj and x.xh=y.xh and x.kc=y.kc
  13.   3       and x.xq=y.xq;


  14.         ID XH       XQ            KC                           CJ LB
  15. ---------- -------- ------------- -------------------- ---------- -
  16.          2 00520113 2002-2003(1)  VFP                          75 2
  17.          1 00520113 2002-2003(1)  computer                 95 1
  18.          5 02510322 2002-2003(1)  VFP                          89 1
复制代码

论坛徽章:
0
发表于 2003-01-19 18:14 |显示全部楼层

请教一个简单的SQL查询的问题

[quote]原帖由 "pydwh"][/quote 发表:

谢谢你:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP