2017-03-22 10 views
1
Select sal 
from emp e 
where 3 >= (select count (sal) 
      from emp a 
      where a.sal <= e.sal) 
order by sal; 

それは昇順内でEMP表に最低3人の給与を返しますこのSQLクエリは何を説明できますか?

例:

10 
20 
30 

誰かが上記の答えを与えた:

Sal (Column/Attribute) 
50 
40 
10 
20 
30 

結果Empテーブル。しかし、私はトップ3の給料を得ています。どこが間違っていますか?わかりません。

+0

[このSQLクエリでは何が起こっているのか誰でも説明できますか?](http://stackoverflow.com/questions/42826699/can-anybody-explain-what-exactily-is-happening-in-this -sql-query) – Degan

答えて

0
select count (sal) from emp a where a.sal<=e.sal 

あなたにこの戻りは、上位レベルからe.salよりsalaty大きい持って行数を選択し;たとえば、最低の場合、selはすべての行の数を返します。

where 3>= (...) 

与えられたよりもsal大きいとだけ3行を持っているあなたの行、この復帰。

order by sal 

これが唯一の私の英語のため申し訳ありませんsal

順になります。

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

+0

ありがとうございました –

0

このクエリでは最低3つの給与が返されますそれ)。私はどのようにあなたがトップ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> = "# of sal <="を見つけ、そしてあなたはそれが最初の3行(10、20、および30)のだということがわかります。

偶然、<>が混在していませんか?

+0

ありがとう –

関連する問題