㈠ sql查询,如何查询一个表中第三行,第三列的数据
可以使用col_name(object_id('tablename'),3)得到第三列的名称,然后再使用列的名称进行查询。不过这样就不能直接写成SQL了,需要构造动态SQL语句。行号应该也可以使用类似方法得到,具体什么函数记不清了。
㈡ 用sql查询第三名到第五名的同学,怎么用呢
我们先分析一下,假设有一个表叫grade,里面有一列叫A,A中记录的是很多学生的成绩,那么我们可以采取这种办法求出第三名学生的成绩(嵌套三次查询语句):
select min(A) AS A3 from grade where A>(select min(A) AS A2 from grade where A>(SELECT Min(A) AS A1 FROM grade))
同样,将这个句嵌套五次就可以取出第五名学生成绩:
select min(A) AS A5 from grade where A>(select min(A) AS A4 from grade where A>(select min(A) AS A3 from grade where A>(select min(A) AS A2 from grade where A>(SELECT Min(A) AS A1 FROM grade))))
最后一步,写一个语句,取上次者之间的值,最终结果是:
select A from grade where A>=(...) and A<=(.....)
第一个括号用步骤一的语句,第二个括号用步骤二的语句,结果是:
select A from grade where A>=(select min(A) AS A3 from grade where A>(select min(A) AS A2 from grade where A>(SELECT Min(A) AS A1 FROM grade))) and A<=(
select min(A) AS A5 from grade where A>(select min(A) AS A4 from grade where A>(select min(A) AS A3 from grade where A>(select min(A) AS A2 from grade where A>(SELECT Min(A) AS A1 FROM grade)))))
结果经过验证,没有问题.
㈢ SQL 第n高查询
逆序排序+取第n个值(从第n-1个值开始,向下取一位)
保证找不到输出值时输出NULL
关键语法:
1.select 数据项 from 表 order by 项 desc limit n-1,1
2.ifnull(判断句,null)
做成函数便于之后使用:
CREATE FUNCTION get_NthHightest(outitermname CHAR,rankitermname CHAR,tablename CHAR,N INT) RETURNS INT
BEGIN
Declare M INT;
SET M=N-1;
IF M <0
THEN RETURN NULL;
ELSE RETURN(
SELECT IFNULL(
SELECT DISTINCT outitermname FROM tablename ORDER BY rankitermname DESC limit M,1),NULL );
);
END
㈣ 请教一个问题,SQL怎么查询出排名第三的人
通过一条SQL选出排列第三的所有人,我可以把思路写给你,自己调试完善下。
第一步,从大到小选出没有重复的分数:select DISTINCT corse from tb order by corse desc
第二步,从小到大选出前三位:select top 3 corse from (select DISTINCT corse from tb order by corse desc) order by corse
第三步,选出第三位:select top 1 corse from (select top 3 corse from (select DISTINCT corse from tb order by corse desc) order by corse)
第四步,选出所有第三名的人:select * from (select top 1 corse from (select top 3 corse from (select DISTINCT corse from tb order by corse desc) order by corse))
㈤ SQL 怎样查询 单科成绩排名第3名的学生
写个笨点的方法,
SELECT * INTO #TempA FROM score ORDER BY degree DESC
SELECT TOP 1 * FROM #TempA WHERE degree NOT IN(SELECT TOP 2 degree FROM #TempA )
㈥ sql查询:部门工资前三高的员工和部门工资最高的员工
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id 。
+------+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+------+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Randy | 85000 | 1 |
+------+-------+--------+--------------+
Department 表包含公司所有部门的信息。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
编写一个 SQL 查询,找出每个部门工资前三高的员工。
例如,根据上述给定的表格,查询结果应返回:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
不妨假设e1=e2=[6,5,4,3],则子查询的过程如下:
1、e1.Salary=3;则e2.Salary可以取4、5、6;COUNT(DISTINCT e2.Salary)=3
2、e1.Salary=4;则e2.Salary可以取5、6;COUNT(DISTINCT e2.Salary)=2
3、e1.Salary=5;则e2.Salary可以取6;COUNT(DISTINCT e2.Salary)=1
4、e1.Salary=6;则e2.Salary无法取值;COUNT(DISTINCT e2.Salary)=0
则要令COUNT(DISTINCT e2.Salary) < 3 的情况有上述的4、3、2.
也即是说,这等价于取e1.Salary最大的三个值。
㈦ sql语句求出第三到第五的工资
sql查询员工的基本工资排名第3-5位的姓名和基本工资,select top 4 姓名,工资 from 表a where 姓名 not in (select top 2 姓名 from 表a order by 工资 desc) order by 工资 desc
查工资的方法:
1、select * from 部门
2、where not exists (select * from 员工 where 员工.部门号=部门.部门号 and 工资 <= 5000)
㈧ sql取出成绩排名第一和第三的语句
你用的是什么数据库? select * from tablename order by 字段 desc where 字段= 1 or 字段= 3 大概就是这么写就行
㈨ 编写一个 SQL 查询,找出每个部门工资前三高的员工
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id 。
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
+----+-------+--------+--------------+
Department 表包含公司所有部门的信息。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
编写一个 SQL 查询,找出每个部门工资前三高的员工。例如,根据上述给定的表格,查询结果应返回:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
Sql如下:
SELECT
d.Name Department,e1.Name Employee,e1.Salary Salary
FROM
Employee e1,
Employee e2 ,
Department d
WHERE
e1.DepartmentId = e2.DepartmentId
AND e1.Salary <= e2.Salary
and e1.DepartmentId=d.Id
group by e1.id
having count(DISTINCT e2.Salary)<=3
order by d.Name,e1.Salary desc
㈩ SQL查询第三大的数值
MYSQL的查询方法
select * from a order by b desc limit 2,1;
没有验证,应该可以 说下思路吧
先按照b列倒序查询,查询出的数据就是从大到小依次排列的,然后limit2,1意思是从第3条记录开始取一条记录,就是第三个了
ORACLE数据库
select * from(select *,rownum r from a order by b desc) where r=3;