1

次のように、Employee と DepartmentId の 2 つの列で構成される Employees のテーブルがあります。

|Employee  | DepartmentId
-------------------------
| e1       | 1           
| e2       | 1
| e3       | 1
| e4       | 2
| e5       | 2
| e6       | 3
| e7       | 3
| e8       | 3
| e9       | 4
| e10      | 5
| e11      | 6

簡単なクエリで 2 人以上の従業員がいる部門を選択したいと考えています。次のことを思いつきました:

  SELECT Department, 
         COUNT(Employee) as Quantity
    FROM Employees
GROUP BY Department
  HAVING (Quantity > 3)
ORDER BY Department

しかし、実行中に無効な列名 (Quantity) について不平を言います。集計関数を 2 回使用する (count() を選択 ... count() を使用する) ことは正しくないと確信しています。何か不足していますか?ps「簡単な」解決策は私が推測する

SELECT Department 
  FROM (SELECT Department, COUNT(Employee) AS Quantity
          FROM Employees
      GROUP BY Department)
 WHERE Quantity > 5
4

3 に答える 3

3

書き込みHAVING COUNT(*) > 3は問題ありません。データベースは式を 1 回だけ評価し、select 句と having 句の両方で結果を再利用します。

サブクエリで値を選択する例も問題ありません(サブクエリのエイリアスが必要であることを除けば)。ここではこの手法を使用する必要はありませんが、式がより複雑で、保守性を理由にコードの繰り返しを避けたい場合に役立ちます。

MySQL では、書きたいクエリが機能することに注意してください。ただし、これは MySQL 固有の拡張機能であり、同じ手法は SQL Server では機能しません。

于 2011-03-02T18:47:33.377 に答える
0

私はそれを試しました..次のクエリはうまくいきます..これが役立つことを願っています...

count(Employee)>2の部門で従業員グループから部門を選択します。

于 2011-03-02T19:07:39.100 に答える
0
  SELECT Department, COUNT(Employee) AS cnt
    FROM Employees
GROUP BY Department
  HAVING COUNT(Employee) > 5

これは SQL Server でも機能します。

于 2011-03-02T18:51:30.453 に答える