姓名 语文 数学 英语
张三 NA 100 100
李四 50 60 NA
王五 80 90 80
要得到
姓名 语文 数学 英语 平均分
张三 NA 100 100 100
李四 50 60 NA 55
王五 80 90 80 83
NA就代表未参加考试,算平均分的时候要去除,SQL怎么写 ?
create table test(name varchar(10),S1 varchar(10),S2 varchar(10),S3 varchar(10))
go
insert into test values
('张三','NA','100','100'),
('李四','50','60' ,'NA'),
('王五','80','90' ,'80')
go
select name , S1,S2,S3,
(case S1 when 'NA' then 0 else convert(int,S1) end +
case S2 when 'NA' then 0 else convert(int,S2) end +
case S3 when 'NA' then 0 else convert(int,S3) end
) /
(case S1 when 'NA' then 0 else 1 end +
case S2 when 'NA' then 0 else 1 end +
case S3 when 'NA' then 0 else 1 end
)
from test
go
drop table test
go
name S1 S2 S3
---------- ---------- ---------- ---------- -----------
张三 NA 100 100 100
李四 50 60 NA 55
王五 80 90 80 83
(3 行受影响)
SELECT test.*,t.average FROM test LEFT JOIN (
SELECT t.name , avg(convert(int,tt.s)) AS average FROM test AS t
CROSS APPLY (VALUES(s1),(s2),(s3)) tt(s)
WHERE ISNUMERIC(tt.s)=1
GROUP BY t.name
) t ON test.name=t.name
;WITH CTE AS
(
SELECT '张三' AS Name,
'NA' AS 语文,
'100' AS 数学,
'100' AS 英语
UNION ALL
SELECT '李四' AS Name,
'50' AS 语文,
'60' AS 数学,
'NA' AS 英语
UNION ALL
SELECT '王五' AS Name,
'80' AS 语文,
'90' AS 数学,
'80' AS 英语
),CTE2 AS
(
SELECT CTE.Name,
CONVERT(INT,NULLIF(语文,'NA')) AS 语文,
CONVERT(INT,NULLIF(数学,'NA')) AS 数学,
CONVERT(INT,NULLIF(英语,'NA')) AS 英语
FROM CTE
)
SELECT a.*,b.分数
FROM CTE a
INNER JOIN (
SELECT Name ,AVG(分数) AS 分数
FROM CTE2 UNPIVOT( [分数] FOR [科目]
IN ([语文],[数学],[英语])) AS c
GROUP BY Name) b ON a.Name = b.Name
等级:
有两张表 A B A B 用ID相关联 现在我想查出B表中ID 对ID的要求是 IX字段只有‘小’ 的 结果应该是 ID=4 5 求SQL
求sql 根据main_id 不同 插入一条data_name 为 ‘demo’ 的sql 谢谢大佬了
表如下: 表1 brand codekey content1 a 1 ccc a 2 bbb a 3 ddd b 5 aaa ... 表2 brand codekey content2 a 1 ...
请问我现在两个表,a表跟b表。 a表为title,fenlei字段,数据为: 标题1,分类1 标题2,分类2 标题3,分类3 ...b表只有mingzi一个字段: ...然后我现在要当a表有一条数据是包含b表的...上面这两个出来,这句sql得如何写?
问题:根据tim列的时间某年某月某时某分,每一个时间对应一个speed,求每5分钟对应的speed和
SQL基础知识整理: 常见的SQL面试题:经典50题 三、50道面试题 2.汇总统计分组分析 3.复杂查询 sql面试题:topN问题 4.多表查询 【面试题类型总结】这类题目属于行列如何互换,解题思路如下: 其他面试题: ...
select avg(col) from [Table] Where candition. col 的数据类型:int,money,float
数据表结构是: stu sub 张三 数学 李四 历史 李四 音乐 李四 英语 张三 音乐 我想查到的结果如下 stu sub 张三 数学,音乐 李四 历史,音乐,英语 求sql
sql 语句 竖表转横表再加连接查询(如下图),求sql 语句 
一张一级菜单表,一张二级菜单表,外键在二级菜单表字段fid...请问如何在查到所有一级菜单的同时,得到对应的二级菜单,江湖救急,大家帮帮我这个菜鸟学生(老师不准我们用框架,用jdbc我也是醉了,我sql学的不是很好)
求SQL语句提示... 表名 Test, 把Num设置为Col_A的个数. 原始数据: Col_A, Num 123 0 123 0 124 0 125 0 更新后数据 原始数据: Col_A, Num 123 2 123 2 124 1 125 1 SQL语句: update TEST ...
我现在有一张users表,有字段uid,uname,address,phone1...主要查phone1,但是如果有一条数据的phone1位空的话,就查phone2,如果phone1,phone2都为空就查phone3,这样的SQL语句要怎么写呢,求大神帮忙解答????
 第一列是-主键-地区-销售人员-销售总额, 请问查询-每个地区销售金额最少的人是谁
表A name subject score zhangsan math 80 zhangsan chinese 90 wangwu math 70 wangwu chinese 85 aa math 90 aa chinese 95 ... ...
求出每个部门(deptno)sal排名前三的员工。 我自己写的是 ``` SELECT e1.deptno, e1.ename, e1.sal FROM EMP e1 LEFT JOIN EMP e2 ON e2.deptno = e1.deptno WHERE e2.sal >= e1.sal GROUP BY e1....
想实现如下功能:每隔10个(或者几个,可定义)数据取其中的最大值和最小值,实在搞不定。。。。
已经有好久没写sql语句了,好多语法都忘记了,今天要写一个求一段时间内数据的统计,遇到了一丢丢小麻烦。低级错误,把正确的语法写出来,以备以后再忘记了。<select id="childbirthSummary" ...
我要检查同一个客户的合同在同一个时间段内是否有重复的。表结构是这样的 怎么写这个sql?
转:http://zhidao.baidu.com/question/514355321.html SELECT 姓名, COUNT ( DISTINCT 身份证号码 ) 身份证数量 FROM 表 GROUP BY 姓名 HAVING ...COUNT ( DISTINCT 身份证号码 ) > 1
比如oralce查出一张表  要转换成如图需求的表 如何做 ![图片说明]...
聚合函数对某一列求和、对满足条件的记录总数求和求最大值、最小值、平均值
** 今天做了一道关于sql注入的题(被虐了555),看了一些题解终于知道了方法,哎!心累** 不过收获还是蛮多的! 打开链接 发现是一道POST注入题(挺头疼的),并且一开始以为给的提示是过滤掉的,...
我用如下SQL语句创建了zcxIncome表格,并插入数据, cmd.CommandText = string.Format("create table zcxIncome(Num int identity(1,1) primary key,Mode varchar(50)"); cmd.CommandText =
一个表格有三列:名字、科目、成绩, 科目中有四门功课,怎么设计查询找出每门功课中成绩 最高的那条信息 想到用group by 可是只能查询功课中最高的成绩,不能显示姓名
建表country_year_population_tab: -- ---------------------------- -- Table structure for country_year_population_tab -- ---------------------------- DROP TABLE IF EXISTS `country_year_population_tab...
表格数据大概这样 status group 1 666 0 666 1 666 0 666 1 777 0 777 需求大概就是占比完成度,从表格看 分组666的总共4条,完成2个,未...sum(case when status=0 then 1...
求 只包含 ‘低’ 的 num 结果应该是 4 8
获取今日订单总数和订单总金额 //fields区分出order_type不等于1的订单,订单金额money加运费order_freight合计 $fields = [ 'COUNT(1) as order_num', 'SUM(IF(order_type != 1, money + order_freight, 0)) ...