2

これを機能させることはできません。最初に休暇と病気休暇の最大合計時間を見つけ、次に休暇と病気休暇の時間の合計がこの値を持つ従業員を見つける必要があります。168 の最大値を取得できますが、どのように配置しても、この基準に一致する従業員だけを取得することはできないようです。すべての従業員の完全なリストを取得するだけです。以下のコードは、クラスの指示に基づいた最後の試みです。ありがとう!

SELECT e.employeeID, SUM(e.vacationhours + e.sickleavehours) AS maxHours
    FROM   humanresources.employee e 
    WHERE  EXISTS (
                   SELECT SUM(e.vacationhours + e.sickleavehours) AS totalhours 
                   FROM   humanresources.employee e) 
    GROUP  BY e.employeeID
4

4 に答える 4

7

TOP WITH TIESこの問題を単純化します...

totalHours の最大数を持つ従業員のリストが必要な場合は、単純に合計で並べ替え、上位 1 つを選択して、最大値を持つすべての従業員を返すようにします。

SELECT TOP 1 WITH TIES
    e.employeeID,
    SUM(e.vacationhours + e.sickleavehours) AS totalHours
FROM humanresources.employee e 
GROUP BY e.employeeID
ORDER BY totalHours DESC;
于 2012-04-13T17:31:05.990 に答える
2

Having条文を見てみよう

于 2012-04-13T17:31:58.250 に答える
2

特定の SQL サーバー構文を使用せずに、これを使用します。これはほとんどの DBMS で機能するはずです。

SELECT e.employeeID,
    SUM(e.vacationhours + e.sickleavehours) AS totalHours
FROM humanresources.employee e 
GROUP BY e.employeeID
HAVING SUM(e.vacationhours + e.sickleavehours) >= all
  (SELECT SUM(e.vacationhours + e.sickleavehours) FROM humanresources
   GROUP BY employeeID)
于 2012-04-13T17:43:51.360 に答える
0

という 1 つのテーブルがemployeeあり、そのテーブルには というフィールドがありますemployeeID。これが非常に悪い命名の場合でない限り、テーブルemployeeIDの主キーです。employee

する必要はありませんgroup by。where句で行をフィルタリングできます。

select e.employeeID, e.vacationhours + e.sickleavehours as Hours
from employee as e
where e.vacationhours + e.sickleavehours = (select max(vacationhours + sickleavehours)
                                            from employee)
于 2012-04-13T18:02:55.017 に答える