1.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
如使用存储过程也可以。
table1
月份mon 部门dep 业绩yj
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部门dep 部门名称dname
--------------------------------
01 国内业务一部
02 国内业务二部
03 国内业务三部
04 国际业务部
table3 (result)
部门dep 一月份 二月份 三月份
--------------------------------------
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
------------------------------------------
select table2.部门名称dname,sum(case when table1.月份mon='一月份' then table1.业绩yj else 0 end) as '一月份'
from table1 ,table2
where table1.部门dep=table2.部门dep
group by table2.部门名称dname;
+---------------+--------+
| 部门名称dname | 一月份 |
+---------------+--------+
| 国内业务一部 | 10 |
| 国内业务三部 | 10 |
| 国内业务二部 | 10 |
| 国内业务四部 | 0 |
+---------------+--------+
2.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
select A, count(*)
om td2
group by A
having count(*)>1;
Year Salary
2000 1000
2001 2000
2002 3000
2003 4000
想得到如下形式的查询结果
Year Salary
2000 1000
2001 3000
2002 6000
2003 10000
sql语句怎么写?
3、用一条SQL语句查询出每门课都大于80分的学生姓名
name
张三
张三
李四
李四
王五
王五
王五
mysql> insert into stu(name,kecheng,fenshu) values('张珊','语文',81);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('张珊','数学',75);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('李四','语文',76);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('李四','数学',90);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('王五','数学',90);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('王五','语文',90);
Query OK, 1 row affected
mysql> insert into stu(name,kecheng,fenshu) values('王五','英语
',90);
Query OK, 1 row affected
mysql> select * from stu;
+------+---------+--------+
| name | kecheng | fenshu |
+------+---------+--------+
| 张珊 | 语文 | 81 |
| 张珊 | 数学 | 75 |
| 李四 | 语文 | 76 |
| 李四 | 数学 | 90 |
| 王五 | 数学 | 90 |
| 王五 | 语文 | 90 |
| 王五 | 英语 | 90 |
+------+---------+--------+
7 rows in set
mysql>
mysql> select distinct name from stu where name not in (select distinct
name from stu where fenshu<80);
+------+
| name |
+------+
| 王五 |
+------+
1 row in set
4.学生表 如下:自动编号
1
2
3
删除除了自动编号不同,其他都相同的学生冗余信息
delete tablename where 自动编号 not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)
delete from stu where name not in
(select a.name
from (select name from stu) a//只有mySql需要通过中间表转一下,否则会报错。
);
错误信息:You can't specify target table 'stu' for update in FROM clause
5.请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有1-12月份的发生额。
AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。
数据库名:JcyAudit,数据集:Select * from TestDB
答:select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur
6
面试题:怎么把这样一个表儿
year
1991
1991
1991
1991
1992
1992
1992
1992
查成这样一个结果
year m1
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
答案一、
select year,
(select amount from
(select amount from
(select amount from
(select amount from
from aaa
这个是ORACLE
select * from (select name, year b1, lead(year) over
(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over(
partition by name order by year) rk from t) where rk=1;
/* 行转列之后又求平均分
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
*/
--SQL SERVER 2000 静态SQL。
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
cast(avg(分数*1.0) as decimal(18,2)) 平均分,
sum(分数) 总分
from tb
group by 姓名