0

私がこれをやろうとしているとき

select first_name from employees 
group by salary,first_name
having salary between 0 and 4800

49件のレコードを取得しています

これを行おうとすると、結果が得られません。

select first_name from employees 
group by salary,first_name
having salary between 0 and (max(salary)/5)

ここselect max(salary)/5 from employees fetches:4800

これは簡単ですが、私がしている愚かな間違いはわかりません

4

3 に答える 3

2

この声明では

select first_name from employees 
group by salary,first_name
having salary between 0 and (max(salary)/5)

給与と first_name でグループ化していますが、これは 1 行だけでグループ化されている可能性があります。基本的に、0 から X/5 の間の X を探しているため、結果が返されない可能性があります。

この声明では

select max(salary)/5 from employees fetches

あなたは何もグループ化していないので、全員の最大給与を取得します。

こう思う

select first_name from employees 
WHERE salary between 0 and (SELECT max(salary) FROM employees)/5

あなたが探しているものです

于 2012-07-25T05:17:19.053 に答える
0

サブクエリを使用して、データに対する 2 番目のパスを回避します。

select first_name
from (select first_name
            ,salary
            ,max(salary) over () max_salary
      from employees)
where salary between 0 and max_salary/5
group by salary,first_name;

なぜ給与と名前でグループ化しているのかわかりませんが。

于 2012-07-25T07:25:12.323 に答える
0

where 句では集計関数を使用できません。

これを使って:

select first_name from employees 
group by salary,first_name
having salary between 0 and (SELECT max(salary)/5 from employees)
于 2012-07-25T05:20:13.747 に答える