一道sql面试题(查询语句)

 

id name age

1  a        11

2  b        11

3  c        12

4  d        13

5  e        12

.

.

.

查询age唯一的那一个

这个应该怎么写

满意答案

热心问友 2010-10-14

select * from table1 where id not in
(
select age from table1 group by age having count(1)>1
)

 
--Updated by Edward.
select * from table1 where age not in
(
select age from table1 group by age having count(age)>1

其他回答(4)

jun

8级

2010-10-14

如果不考虑效率,可写为:

select * from T where age in (select age from T group by age having count(id)=1)

 

开心熊熊

9级

2010-10-14

select age from ** group by age
 

小勇 5级 2010-10-14

DECLARE @table TABLE(id int,names varchar(20),age int)   
INSERT INTO @table values(1,'a1',11)
INSERT INTO @table values(2,'a2',11)
INSERT INTO @table values(3,'a3',12)
INSERT INTO @table values(4,'a4',13)
INSERT INTO @table values(5,'a5',13)
select * from (
select * from (select count(age) as counts,age from @table group by age) a where
a.counts=1) b,@table c where b.age=c.age

-------------------------------------------------------------

给你一个在查询分析器里运行的结果  你自己稍微一改表名和列名就可以了

 

巧克力先生

7级

2010-10-15

select id,name,age from (表名) where age='13'

一道SQL语句面试题,关于group by

 
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

日期 胜 负
2005-05-09 2 2
2005-05-10 1 2

补充:
补充问题一点:此表中只有两个字段。。。。
除了此种sql语句(select rq, sum(case when
shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0
end)'负' from #tmp group by rq )

满意答案

Moonlight

5级

2008-07-30

没想到更简洁的方法了,跟你的思想差不多
select rq,count(case shengfu when '胜' then shengfu end) '胜',count(case shengfu when '负' then shengfu end ) '负' from test group by rq

其他回答(1)

*开心果* 4级 2008-07-30

select 日期,count("胜") as 胜,count("负") as 负
from 表名
group by 日期

SQL语句 里的order by 、group by、having、where 用在哪里

 

SQL语句 里的order by 、group by、having、where 应该用在哪里 老混起来

特别是having和where 两个什么区别啊

满意答案

传说の魔法师 7级 2010-03-07

1.order by 是 按字段 进行排序.. 字段后面可跟 desc 降序..asc 升序..默认为升序

2.group by 是进行分组 查询

3.having 和 where 都属于 条件过滤 区别在于 一般having是和 group by 连用...

目的是 分组后进行的条件查询...而如果在group by 前面有where 则是表示 先条件过滤再 分组

这个在实际中 特殊的查询 会影响到查询结果

PS: 这几条关键字 是有先后顺序的.

where.....group by....having.....order by

都是可选..但是如果全部写出来 必须是这个顺序...

补充:
再说一下.. 只所以需要having 就是因为where 必须是在 group by 前面的..所以 如果是要分组的条件过滤..where是无效的....
追问:

先执行having再where 还是先where 后having条件?

偽Lǒvの訫動 的感言: 哦 非常感谢 2010-03-07

其他回答(1)

CBA001 11级 2010-03-07

having是和group by 配套用的,

where 是条件,一般都要用到,

order by 是把查询结果排序。

追问:
having好像和where 差不多 都表条件啊 有having能不能有where啊?

QL语句中的 Distinct 和 Group by 有什么不同,用那个好?

 
select Distinct 品名,单位 from [表]

select 品名,单位 from [表]
Group by 品名,单位

查询的结果是一样的,都是把相同的记录合并为一条,这两个有什么不同,用那一个好一点?

满意答案

安靜の聽
中级团

合作回答者:1人
2012-06-19

GROUP BY 没有你那么用的,你那个语句的目的就用DISTINCT
GROUP BY是在求聚合的时候使用(比如SUM,COUNT等)

 

其他回答(2)

热心问友

2012-06-19

distinct去除重复,group by根据条件分组查询
 

热心问友 2012-06-19

我不给你转摘枯燥难读的文章,给你用例子说明:

不过,首先我要说:它俩的作用完全不同,如果你只把group by当做去掉重复记录的工具,就太小看它了,

善于使用它,将会为你的工作带来极大的便利,而且能够制作出非常科学高效的报表!

group by主要是用来分组的,怎么个分组呢?

以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录

====================================================================
★★★例子1:假如有这么一个表:tab_1,它有两个字段:xm、gzlb、je(姓名、工资类别、金额),具体数据如下:

xm```````gzlb`````````je
-----------------------------------------
张三`````养老金`````1000
张三`````护理费`````200
张三`````其他```````50

.............

李四`````养老金`````800
李四`````其他```````50

.............

王五`````养老金`````900
王五`````其他```````35

可以看出每个人的工资都是按类别存放的,如果要返回合计的数据,如:

张三``````1250
李四``````850
王五``````935

该怎么写SQL呢?初学者往往会这么写:select xm, sum(je) from tab_1;但结果会是什么样呢?结果将是:

张三``````1250
张三``````850
张三``````935
李四``````1250
李四``````850
李四``````935
王五``````1250
王五``````850
王五``````935

这是将全部字段都进行了所有的排列组合,即:笛卡尔积!要防止这个情况的发生,我们就可以用到group by(分组)了!
select xm, sum(je)
from tab_1
group by xm;

上面的SQL指定了用xm字段分组,这样一来就返回出正确的结果了:
张三``````1250
李四``````850
王五``````935

====================================================================
★★★例子2:假设又有这么一个表:tab_2,有这些字段:bh, xm, dah,……(编号、姓名、档案号、……),

比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:
bh``````xm```````dah
------------------------
1```````张三`````10001
2```````李四`````10002
3```````王五`````10003

………………

84``````张三`````10001
85``````赵六`````10004

………………

126`````王五`````10003

可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?

select bh, xm, dah
from tab_2
group by xm, sfzh
having count(*) >= 2;

返回值为:
bh``````xm```````dah
------------------------
1```````张三`````10001
84``````张三`````10001
3```````王五`````10003
126`````王五`````10003

解释一下刚才的SQL:是从tab_2表中检索编号、姓名、档案号,怎么检索呢?是用姓名、档案号做为分组,分组的条件是记录数大于等于2的。

这个比喻很形象:having count()语句相对于group by语句,就相当于where语句相对于select语句

====================================================================

所以,group by 这个分组语句是非常有用的一个好东西,还是那句话:善于使用它将会为你的工作带来极大的便利,而且能够制作出非常科学高效的报表!


一道sql面试题(查询语句)的更多相关文章

  1. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

  2. SQL结构化查询语句

    SQL结构化查询语句 SQL定义了查询所有关系型数据库的规则. 1.通用语法 SQL语句可以单行或者多行书写,以分号结尾 可以使用空格和缩进增强可读性 不区分大小写,但是关键字建议大写 3种注释 注释 ...

  3. SQL Server-简单查询语句,疑惑篇(三)

    前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开始正 ...

  4. 汽车之家一道SQL 面试题,大家闲来无事都来敲一敲

    写在前面 上周去汽车之家面试,拿到这个SQL笔试题顿时感觉到有些陌生,因为好长时间不写SQL语句了,当时只写了表设计,示例数据和SQL语句都没写出来. 汽车之家应该用的SQL Server, 编程题一 ...

  5. sql的基本查询语句

    --------------------------------------------基本常用查询-------------------------------------- 自己简单练习做了个表. ...

  6. SQL Server-简单查询语句,疑惑篇

      前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开 ...

  7. sql 中联合查询语句

    在查询语句中 两张表进行查询,可以通过 left join (左连接查询) :返回左表中的所有记录和右表中联结字段相等的记录  (意思就是左表中的数据会全部显示,右表中只会显示和左表中相等的字段) r ...

  8. c# sql在where查询语句中使用字符串变量与int型变量

    使用where语句访问数据库时where语句用上文中以及定义过的变量来查询. string sql3 = string.Format("update Ships set ContainerN ...

  9. sql sever基本查询语句

    查询(*可代表全部)(<>代表不等于于)select 列名 from 表名(,隔开)where 查询条件order by 排序的列名+连接的数据类型必须兼容(结果为字符串数据的连接 , 如 ...

随机推荐

  1. Content://sms

    package com.example.sms; import android.app.Activity; import android.app.Notification; import androi ...

  2. BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)

    2878: [Noi2012]迷失乐园 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 319  Solved:  ...

  3. 在InstallShield中发布单一的Setup.exe文件

    原文:在InstallShield中发布单一的Setup.exe文件 InstallShield默认的Release模式下,生成了一个setup.exe文件,一个msi文件,以及一些其它的杂项文件. ...

  4. 将Sublime Text 2搭建成一个好用的IDE(转)

    将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2 ...

  5. nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)

    原本是使用connect-mongo的,可能是express版本号的升级报错了.改用connect-mongodb.可是使用后出现了例如以下的警告: G:\nodejs\moviesite>gr ...

  6. i++与++i哪个效率更高

    简单的比较前缀自增运算符和后缀自增运算符的效率是片面的, 因为存在很多因素影响这个问题的答案. 首先考虑内建数据类型的情况: 如果自增运算表达式的结果没有被使用, 而是仅仅简单地用于增加一元操作数, ...

  7. 使用C#或javascript将Table里的数据导出到Excel

    原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...

  8. 我的MYSQL学习心得(一)

    原文:我的MYSQL学习心得(一) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL ...

  9. ubuntu下一个rootusername入口mysql,如何查看username和password,如何改变rootpassword

    mysql -u root -p 按Enter键,提示时输入密码access denied......ues password YES/NO错误. 第一步: 然后,你需要输入/etc/mysql夹.然 ...

  10. 第5章 原型模式(Protype Pattern)

    原文 第5章 原型模式(Protype Pattern) 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Pro ...