求一个SQL语句,达到下面的要求 (排名次)(50分)

  • 主题发起人 主题发起人 shayang
  • 开始时间 开始时间
S

shayang

Unregistered / Unconfirmed
GUEST, unregistred user!
(不知道这属于哪个分类,姑且放这里吧)

有一个MySQL的表及数据如下:
+------+--------+-------+--------+-------+
| id | name | yuwen | shuxue | waiyu |
+------+--------+-------+--------+-------+
| 2 | 冯 雷 | 132 | 140 | 140 |
| 3 | 金 娟 | 132 | 139 | 141 |
| 6 | 罗 侠 | 122 | 139 | 141 |
| 5 | 孙 雨 | 125 | 137 | 136 |
| 9 | 黄路漫 | 129 | 133 | 136 |
| 1 | 刘星红 | 116 | 135 | 137 |
| 4 | 李 瑶 | 115 | 137 | 136 |
| 8 | 李旭东 | 119 | 131 | 134 |
| 7 | 刘 武 | 112 | 130 | 124 |
+------+--------+-------+--------+-------+
用什么SQL语句出现下面的结果?
+------+--------+-------+--------+-------+------+------+
| id | name | yuwen | shuxue | waiyu | 总分 | 总名 |
+------+--------+-------+--------+-------+------+------+
| 2 | 冯 雷 | 132 | 140 | 140 | 412 | 1 |
| 3 | 金 娟 | 132 | 139 | 141 | 412 | 1 |
| 6 | 罗 侠 | 122 | 139 | 141 | 402 | 3 |
| 5 | 孙 雨 | 125 | 137 | 136 | 398 | 4 |
| 9 | 黄路漫 | 129 | 133 | 136 | 398 | 4 |
| 1 | 刘星红 | 116 | 135 | 137 | 388 | 6 |
| 4 | 李 瑶 | 115 | 137 | 136 | 388 | 6 |
| 8 | 李旭东 | 119 | 131 | 134 | 384 | 8 |
| 7 | 刘 武 | 112 | 130 | 124 | 366 | 9 |
+------+--------+-------+--------+-------+------+------+
 
没验证,自己试试吧
Select id,name,yuwen,shuxue,waiyu,yuwen+shuxue+waiyu as 总分,
总名=(Select Count(*)+1 from table1 where yuwen+shuxue+waiyu>A.yuwen+A.shuxue+A.waiyu)
from table1 A
order by 总名
 
| 2 | 冯 雷 | 132 | 140 | 140 | 412 | 1 |
| 3 | 金 娟 | 132 | 139 | 141 | 412 | 1 |
2个都是第一啊
 
Select id,name,yuwen,shuxue,waiyu,yuwen+shuxue+waiyu as 总分,
总名=(Select Count(*)+1 from table1 where yuwen+shuxue+waiyu>A.yuwen+A.shuxue+A.waiyu)
from table1 order by 总分
 
上面三位朋友的都提示有语法问题
 
其实比较复杂的是那个名次,你可以通过自定义函数来完成
CREATE FUNCTION mingci (@zongfenshu int)
RETURNS int AS
BEGIN
Return (select count(*)+1 from table where (yuwen+shuxue+waiyu)>@zongfenshu )
END
调用:
Select id,name,yuwen,shuxue,waiyu,yuwen+shuxue+waiyu as zongfenshu,dbo.mingci(yuwen+shuxue+waiyu) as mingci from table1
没有调试,应该能实现
 
楼上的自定义函数写的好,赞一个!!
 


不错。。
 
MySQL的表不知道怎么弄
MsSQL下可以
 
lgwen说出了我的意思。MySQL下,前面几位朋友说的,我都没办法实现。
 
楼主,表结构不合理
先不要写SQL语句了,先改表结构吧
看你的表是一个成绩管理程序
如果哪天不上这几门课或课程改了,或加了一门课你的程序不是废了?
 
mysql中没有自定义函数吗?
 
to 一条大鱼:你说的问题我考虑好了的。(高考模式不会天天变,大致情况我知道的,我在程序中已经考虑过了,只是有个老师希望能实时的见到单科的名次,虽然我不觉得有用,但别人提出来了,总得考虑一下吧)

to weichao9999,这个我真不知道,我在网上查了一些,没见过自定义函数
 
创建一个例子表:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TABLE1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TABLE1]
GO

CREATE TABLE [dbo].[TABLE1] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ID1] [int] NULL ,
[AAA] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TABLE1] WITH NOCHECK ADD
CONSTRAINT [PK_TABLE1] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
添加调试数据:
Insert Into Table1(ID1,AAA) Values(1,'t_seak')
Insert Into Table1(ID1,AAA) Values(2,'t_abc')
Insert Into Table1(ID1,AAA) Values(100,'HAHAHA')
Insert Into Table1(ID1,AAA) Values(1,'a')
Insert Into Table1(ID1,AAA) Values(2,'s')
Insert Into Table1(ID1,AAA) Values(1,'a1')
Insert Into Table1(ID1,AAA) Values(100,'s1')
Insert Into Table1(ID1,AAA) Values(1,'a2')
Insert Into Table1(ID1,AAA) Values(100,'s2')
Insert Into Table1(ID1,AAA) Values(200,'a3')
获得员工(AAA)的成绩(ID1)的排行(IDCount):
select A.AAA,A.ID1,isnull((select Count(*) As IDCount from Table1 Where ID1>A.ID1),0)+1 As IDCount From table1 A order by A.ID1 desc
其他的字段你自己添加好了.
 
我查了,有的
http://www.icylife.net/yunshu/show.php?id=244
 
MySQL好像不能用子查询的噢?
 
你这种表结构设计,万一科目发生变化怎么办?
 
简单啊,前面的查询sql就不写了,排序方面order by 总分,name
这样就行
 
lgwen 的思路最好
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
426
import
I
I
回复
0
查看
635
import
I
I
回复
0
查看
703
import
I
回复
3
查看
592
菜鸟黄
后退
顶部