一,关于 group by

表内容: 
2005-05-09 胜 
2005-05-09 胜 
2005-05-09 负 
2005-05-09 负 
2005-05-10 胜 
2005-05-10 负 
2005-05-10 负

需要生成结果为:

Fday
2005/5/9 2 2
2005/5/10 1 2

建表:

 create table t_com(Fday varchar(10),Fwin_lose nchar(1))
insert into t_com values('2005-05-09','胜')
insert into t_com values('2005-05-09','胜')
insert into t_com values('2005-05-09','负')
insert into t_com values('2005-05-09','负')
insert into t_com values('2005-05-10','胜')
insert into t_com values('2005-05-10','负')
insert into t_com values('2005-05-10','负')

答案:

 --解释:sum中的then后的数字表示'代表几',如'1'表示'出现一个记录,基数加1'.

 select Fday [日期],
SUM(case when Fwin_lose='胜' then 1 else 0 end) [胜],
SUM(case when Fwin_lose='负' then 1 else 0 end) [负]
from t_com group by Fday

二,关于 case 选择

题目:表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列,否则选择B列;当B列大于C列时选择B列,否则选择C列。

创建表:

create table t_selmax(FA int, FB int, FC int)
insert into t_selmax values(1, 2, 3)
insert into t_selmax values(3, 2, 0)
insert into t_selmax values(11, 4, 3)
insert into t_selmax values(1, 12, 31)

实现结果:

a_b b_c
2 3
3 2
11 4
12 31

答案:

select
(case when [FA] > [FB] then [FA] else [FB] end) a_b,
(case when [FB] > [FC] then [FB] else [FC] end) b_c
from t_selmax

三,关于评分

题目:有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来:

语文 数学 英语
及格 优秀 不及格

创建表:

create table t_grade_mark(cn float, math float, en float)
insert into t_grade_mark values(78, 78, 90)
insert into t_grade_mark values(33, 67, 71)
insert into t_grade_mark values(66, 78, 69)
insert into t_grade_mark values(87, 88, 46)
insert into t_grade_mark values(70, 80, 58)
insert into t_grade_mark values(90, 66, 82)

答案:

select (case when [cn]>=80 then '优秀' when [cn] >= 60 then '及格' when [cn] < 60 then '不及格' end) [语文],
(case when [math]>=80 then '优秀' when [math] >= 60 then '及格' when [math] < 60 then '不及格' end) [数学],
(case when [en]>=80 then '优秀' when [en] >= 60 then '及格' when [en] < 60 then '不及格' end) [英语] from t_grade_mark
where [cn]=70 and [math]=80 and [en]=58

(补充),对每个字段都进行同样的case判断,我觉得代码有点冗余度.有谁有好的方法,欢迎提出.

四,group by 和 having(华为面试)

题目:一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

建表:

create table t_ids(id nvarchar(5), name nvarchar(20) not null, age int)
insert into t_ids values('x001', 'jcson', 20)
insert into t_ids values('x001', 'domy', 21)
insert into t_ids values('x002', 'jim', 22)
insert into t_ids values('x003', 'lucy', 19)
insert into t_ids values('a001', 'hoby', 27)
insert into t_ids values('a001', 'kin', 20)
insert into t_ids values('a001', 'cry', 23)

实现结果:

id 个数
a001 3
x001 2

答案:

select id, COUNT(*) [个数] from t_ids group by id having COUNT(*) > 1

sql - 面试的更多相关文章

  1. 一道SQL面试例题 if...else 与聚集函数

    晚上回来,同学说面试遇到了一个SQL面试题目,自己做了一下,总结总结. 题目如下: 下面是产品数据表(产品id,颜色col,数量num),其中每种产品有1~2种颜色. 求每种产品各颜色的数量差值(对于 ...

  2. Sql面试常考题(持续添加)

    最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...

  3. sql面试

    1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name   kecheng   fenshu 张三     语文       81张三     数学       75李四     语文   ...

  4. SQL面试笔试经典题(Part 2)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记. 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.html 01 问题 ...

  5. SQL面试积累

    以下题目都在MySQL上测试可行,有疏漏或有更优化的解决方法的话欢迎大家提出,我会持续更新的:) 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每 ...

  6. sql面试学到新内容

    1.事物的保存点 MYSQL可以让我们对事务进行部分回滚,就是在事务里调用SAVEPOINT语句来设置一些命名标记.如果想要回滚到那个标记点位置,需要使用ROLLBACK语句来指定哪个保存点. mys ...

  7. SQL面试整理(1)——数据库连接池

    在web开发中,如果JSP.Servlet或EJB使用JDBC直接访问数据库,每一次数据访问请求都必须经历建立数据库连接,打开数据库,存取数据库和关闭数据库连接等操作步骤,如果频繁发生这种数据库操作, ...

  8. sql面试-查询选修课程的学生

    首先: 1 .  EXISTS 子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2 . 建立程序循环的概念,这是一个动态的查询过程.如 F ...

  9. SQL面试50题

    1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...

随机推荐

  1. bcb 如何在DLL中捕捉系统级异常

    http://topic.csdn.net/t/20031023/09/2385627.html -------------------------------------------------- ...

  2. yii分页

    关于分页有一个重要的类CPagination. CPagination represents information relevant to pagination. http://www.yiifra ...

  3. QT、QTE、qtopia区别

    QT.QTE.qtopia区别 Qt的授权是分为两条线,商业版和开源版.如果使用商业版的Qt,那么开发出的程序可以是私有的和商业的:如果使用的是开源版的Qt,由于其使用的是GPL协议,那么可发出的程序 ...

  4. 解决SecureCRT中文版“数据库里没找到防火墙‘无’”的错误提示

    打开SecureCRT时总是会提示没有防火墙,很是讨厌! 怎么解决呢? 第一步:选项->全局选项 第二步:将配置文件夹里面的内容拷贝到资源管理器下进入 第三步:添加FireWalls的文件夹,上 ...

  5. SCU 4436 Easy Math 2015年四川省赛题

    题目链接:http://acm.scu.edu.cn/soj/problem/4436/ 题意:给你n个整数,求这n个数的平方根和是否是一个整数: 解题思路:如果这题每个数给他算出来,必然费时间,可能 ...

  6. VK Cup 2015 - Round 1 -E. Rooks and Rectangles 线段树最值+扫描线

    题意: n * m的棋盘, k个位置有"rook"(车),q次询问,问是否询问的方块内是否每一行都有一个车或者每一列都有一个车? 满足一个即可 先考虑第一种情况, 第二种类似,sw ...

  7. SRM 508(2-1000pt)

    DIV2 1000pt 题意:给定整数n和r,求有多少个这样的数列,a1,a2...an,使得a1 + a2 +...+an = a1|a2|a3|...|an,(按位或).输出这样数列的个数mod  ...

  8. 浅谈数据库系统中的cache

    Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很 ...

  9. 6种GET和POST请求发送方法

    我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全. 无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库.对于多说,请求的格式如下: // 获取评论次数,参数是文章ID ...

  10. Apache Kylin

    日前,eBay公司隆重宣布已经正式向开源业界推出分布式分析引擎:Kylin(http://kylin.io).作为一套旨在对Hadoop环境下分析流程进行加速.且能够与SQL兼容性工具顺利协作的解决方 ...