2016-11-22 7 views
0

私はデータテーブルを持っています。従業員、私は最大の従業員数が雇われた同じ日に雇われたすべての従業員を表示したいと思います。ここに私のコードだ:最大値を数えよう

select last_name, hire_date, count(*) as "Number of Employees Hired" 
from employees 
group by last_name, hire_date 
where hire_date = max(count(*)); 

しかし、このコードは、私はそれを実行すると、エラーを「SQLコマンドが正しく終了していません」と表示されます。正しく動作するように修正するにはどうすればよいですか?

+0

何データベース - Oracle、およびどのバージョン? – OldProgrammer

+0

@ OldProgrammerこれはOracle SQL Developerバージョン4.1.5.12です。 – Tim

答えて

1

これは、クリーンな方法ではないかもしれないが、私は、トリックを行うだろうと思う:

SELECT last_name, 
    max_hire.hire_date, 
    max_hire.cnt 
FROM 
    (SELECT * 
    FROM 
    (SELECT hire_date, 
     COUNT(*) cnt 
    FROM employees 
    GROUP BY hire_date 
    ORDER BY COUNT(*) DESC 
    ) 
    WHERE rownum = 1 
) max_hire 
INNER JOIN employees 
ON employees.hire_date = max_hire.hire_date 
+0

ありがとうOldProgramme!見た目は複雑ですが、うまくいきます。 – Tim

0

まず、あなたはGROUP BY句の前WHEREを使用する必要があり、第二に、あなたは正しく、あなたのケースのようにcount(*)WHERE句の中に比較することはできません集約関数(count)を使用する必要があります。

あなたはどこ使用せずに、以下の方法で行くことができます(は、MySQLでテスト)

select last_name, hire_date, count(*) as "Number of Employees Hired" 
from employees 
group by last_name, hire_date 
Order by "Number of Employees Hired" desc limit 1 

・ホープ、このことができます。乾杯。

+0

これはOracleで動作しません。<12c – OldProgrammer

+0

@OldProgrammerだから、私は 'Tested Under MySQL'と言いました。私はTimが彼が使用しているどのプラットフォームでもクエリを変換できると確信しています。 –

関連する問題