如何得到这个表中某个整形字段第二小的值,不能使用 limit in top 关键字

2015-08-30 17:22:50 +08:00
 buckethead1

用 limit,top,in 我都会写,但是不用的话真想不出来 T_T

limit

select x.* from (select * from test order by b limit 2 ) x order by x.b desc limit 1;
top 和 limit 一样

in

select min (b ) from page_test where b not in
(select min (b ) from page_test );

已经想了好久了,用 count?还是用高级的函数?

2632 次点击
所在节点    MySQL
5 条回复
realpg
2015-08-30 17:31:51 +08:00
MYSQL:
select min (xxx ) from table where xxx> (select min (xxx ) from table );
realpg
2015-08-30 17:45:18 +08:00
更正,你这需求不太明确:

假设 table 表结构如下
pk (主键) xxx
如果值那一列为 1 1 2 3 4 5 6 7 第二小的是 1 还是 2 ?如果单纯按照值来算 第一小的是 1 ,第二小的是 2
如果按照列排序的方式算,第一小的是 1 第二小的还是 1

第一种方式:
select min (xxx ) from `table` where xxx> (select min (xxx ) from `table`);

第二种方式:
select min (xxx ) from `table` where xxx>=(select min (xxx ) from `table`) and pk<> (select pk from (select pk,min (xxx ) from `table`) a );
phx13ye
2015-08-30 18:42:47 +08:00
有一道题叫做 Nth Highest Salary ,解法是
SELECT DISTINCT Salary FROM Employee Emp1 WHERE (N-1 ) = (SELECT COUNT (DISTINCT (Salary ))
你可以看一下,
具体思路是,对于这条第二小的记录,肯定有一条记录比他还小
phx13ye
2015-08-30 18:43:55 +08:00
没写完整
SELECT DISTINCT Salary FROM Employee Emp1 WHERE (N-1 ) = (SELECT COUNT (DISTINCT (Salary ))
FROM Employee Emp2 WHERE Emp2.Salary > Emp1.Salary )
buckethead1
2015-08-30 19:30:12 +08:00
@phx13ye 谢谢 我就在想这种方法
select int from table x
where 1=
(select count (int ) from table y where y.int < x.int );
不考虑重复的问题,这样解法就是我一直有思路但是没想出来的 0.0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX