Select sal
from emp e
where 3 >= (select count (sal)
from emp a
where a.sal <= e.sal)
order by sal;
它将按照升序顺序返回Emp Table中最低的三个薪水
示例:Emp
表
Sal (Column/Attribute)
50
40
10
20
30
结果:
10
20
30
有人给出了上述答案。但是,在比较我获得top3工资。我到底哪里错了?我不明白。
答案 0 :(得分:0)
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle profile-image" data-toggle="dropdown">
<img id="clip" src="https://www.habbo.com.br/habbo-imaging/avatarimage?hb=img&figure=hr-828-52.hd-180-1.lg-280-1422.ch-3032-66-1408&action=wav&direction=2&head_direction=3&gesture=sml&size=m" />
Adam Sandler <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#"><i class="fa fa-cog"></i> Account</a></li>
<li class="divider"></li>
<li><a href="#"><i class="fa fa-sign-out"></i> Sign-out</a></li>
</ul>
</li>
</ul>
这会从上一级选择向您返回salaty大于select count (sal) from emp a where a.sal<=e.sal
的行数;例如,对于最低e.sal
,它将返回所有行的数量;
sel
此返回给您的行只有 where 3>= (...)
行,而3
行比给定的更多。
sal
这仅按order by sal
抱歉我的英文。
答案 1 :(得分:0)
如果您的数据集(e.sal)包含(50,40,10,20,30),那么请浏览您的数据:
where 3 >=
(select count (sal)
from emp a
where a.sal <= e.sal)
您的结果:
For e.sal = 50: Count = 5 [50, 40, 10, 20, 30] FALSE
For e.sal = 40: Count = 4 [40, 10, 20, 30] FALSE
For e.sal = 10: Count = 1 [10] TRUE
For e.Sal = 20: Count = 2 [10, 20] TRUE
For e.Sal = 30: Count = 3 [10, 20 30] TRUE
因此,您的WHERE子句将您限制为10,20,30,然后按升序排列:10,20,30
答案 2 :(得分:0)
该查询确实返回了最低的三个工资(尽管有更好的方法可以做到这一点)。我不确定你是如何获得前3名的工资。
对于emp
表中的每一行,WHERE
子句中的子查询返回的工资数小于或等于当前工资。结果是这样的:
+-----+-------------------------+
| sal | # of sal <= |
+-----+-------------------------+
| 10 | 1 (10) |
| 20 | 2 (10, 20) |
| 30 | 3 (10, 20, 30) |
| 40 | 4 (10, 20, 30, 40) |
| 50 | 5 (10, 20, 30, 40, 50) |
+-----+-------------------------+
现在查看这些结果,找到3&gt; = "# of sal <="
的行,您将看到它是前3行(10,20和30)。
您确定没有意外混淆<
和>
吗?