第一家公司
因SQL语言忘记第一大题没有做PASS
一SQL
表Test结构如下:
姓名 |
时间 |
电话 |
结果 |
张三 |
11-01 08:30 |
111 |
未接通 |
李四 |
12-01 08:31 |
222 |
接通 |
王五 |
11-02 08:32 |
333 |
未接通 |
张三 |
12-04 09:25 |
111 |
接通 |
张三 |
12-10 09:31 |
111 |
接通 |
…… |
|
|
|
……. |
|
|
|
1, 请写出查询以下结果的sql命令
姓名 接通量 未接通量
张三 2 0
李四 1 0
王五 0 0
………
Select 姓名,sum(Case when 结果=‘接通’then 1 Else 0 end)as 接通量,sum(Case when 结果=‘未接通’then 1 Else 0 end)未接通量
From Test group by 姓名
2, 如记录数是百万级,有何优化方法?
尽量避免全表扫描,可以在order by 涉及的列上建立索引
大家有其他方法,各抒己见
二、数据如下1,1,2,3,5,8,13,21……求第30位数据是多少
这个是斐波那契数列,别的不多说了
Int shu (int n){
If(n<=2)
Return 1;
Else
Return shu(n-1)+shu(n-2)
}
第二家公司
1. Union all 与union的区别?truncate 与delete的区别?having如何使用
(1) union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
(2) TRUNCATE TABLE 在功能上与不带 WHERE子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
(3) 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用,它可以和合计函数一起使用
2. 对聚集索引和非聚集索引的理解
聚集索引时物理排序(效率高,但只有一个) 非聚集索引是按照物理和逻辑排序(不高,可频繁操作) 你可以把索引理解为字典 聚集索引直接查询到子 非聚集索引则需要先查偏旁或者拼音再查字
3. 下面这个sql 会引起索引吗?
Select name from awhere name like ‘%a’(1)不会,全表扫描
Select name from awhere name like ‘a%’(2)会
4.sql如何实现分页查询,简单写一个分页
Select top 页大小 id from a
Where (id not in
(select top 页大小*页数 id
From a order by id
)
)order by id
5. 表A
Id |
name |
Sex |
1 |
li |
男 |
2 |
张 |
男 |
3 |
Wu |
男 |
4 |
An |
女 |
5 |
Ce |
男 |
6 |
Cao |
女 |
查询性别为男女根据id排序的最前的两条数据
查询结果如下
Id |
name |
Sex |
1 |
li |
男 |
4 |
An |
女 |
Select *from A where id in (select min(id) from A group by sex)
第三家公司
1、 某网页一块HTML代码如下
<table id=”td”><tr><td>1</td><td>2</td></tr></table>
请在网页里面添加一个脚本,使当单击表格的时候,用alert()弹出一个框,把<td>内容提取出来
把jquery引入
<script type="text/javascript">
$(function(){
$("#td1td").click(function () {
alert($(this).text());
})
});
</script>
2 ,数据库中有张学生成绩表score,4个字段,id int 主键 stid int 学生表的主键
socre int 分数 recorddate 分数录入时间
学生表student
stid in 主键 ; sname nvarchar(50) 姓名
已知每个学生在同一时间只能录入一条成绩的记录
(1) 请写出sql 语句查询出每个学生最后一次录入系统时间对应的记录:姓名,录入时间,分数
(2) 请写出sql 语句查询每个学生分数最高分的记录:姓名,录入时间,分数
select student.sname,score.
3,快速查询方法排序
static void QuickSort(ref List<int> nums, int left, int right)
{
if (left <right)
{
int i = left;
int j = right- 1;
int middle =nums[(left + right) / 2];
while (true)
{
while (i< right && nums[i] < middle) { i++; };
while (j> 0 && nums[j] > middle) { j--; };
if (i ==j) break;
nums[i] =nums[i] + nums[j];
nums[j] =nums[i] - nums[j];
nums[i] =nums[i] - nums[j];
if(nums[i] == nums[j]) j--;
}
QuickSort(refnums, left, i);
QuickSort(refnums, i + 1, right);
}
}
面试大题
1、 每一行都有一个IP地址,这些IP地址可能在文件中多次出现,请找到出现次数最多的前10条记录
在数据库中查询如下
--查询重复数据所有
select * from FileRepeat where id in (select id from FileRepeatgroup by id having COUNT(*)>2 )
select id ,COUNT(id)次数 fromFileRepeat where id in (select id from FileRepeat group by id havingCOUNT(*)>2 ) group by id
--查询重复数据,仅仅展示出来
select top 3 id ,COUNT(id)次数 fromFileRepeat where id in (select id from FileRepeat group by id havingCOUNT(*)>2 ) group by id order by COUNT(id) desc
2、 有一个四位数a1 a2a3 a4,每一位数都是0到9之间的一个数字,要求这四位数满足下面两个条件:(1)a1+a2+a3+a4=20;a1<a2<a3<a4,请找出所有这些数
for (int i = 1200; i < 9999;i++)
{
a1 = i / 1000;
a2 = (i %1000) / 100;
a3 = (i %1000) % 100 / 10;
a4 = i % 10;
if (((a3 + a2+ a1 + a4) == 20) && a1 < a2 && a2 < a3 && a3< a4)
//if (((a3 +a2 + a1 + a4) == 20))
{
Console.WriteLine(i);
}
}
(2)如果a1+a2+a3+a4=m;这个是你你必须要优化i的取值范围(大家自己找方法吧)
未完