-2

次のデータを含む ProjectRessources というテーブルがあります。

+-----------+------------+---------+-----------+
| projectId | employeeId | nbHours | wageHours |
+-----------+------------+---------+-----------+
| 1         | 1876       | 500     | 65        |
| 1         | 4354       | 2000    | 31        |
| 2         | 2231       | 250     | 55        |
| 3         | 1212       | 3000    | 35        |
| 3         | 1876       | 2000    | 35        |
| 3         | 2231       | 500     | 65   

次のようなものを取得するには、複数のプロジェクトに取り組んだ従業員にクエリを実行する必要があります。

+------------+----------------+
| employeeId | nbProjects |
+------------+----------------+
| 1876       | 2              |
| 2231       | 2              |
+------------+----------------+

私が試してみました

    SELECT DISTINCT employeeID,projectID
    FROM ProjectRessources
    WHERE COUNT(projectID) >1;

しかし、COUNT を使用するとエラー 1111 が発生します。

ERROR 1111 (HY000): Invalid use of group function

私はその後、このようなことを試みました

SELECT DISTINCT
employeeId ,
COUNT(projectId) as nbProjects
From ProjectRessources
WHERE nbProjects >1;

しかし、その後、次のエラーが発生します

ERROR 1054 (42S22): Unknown column 'nbProjects' in 'where clause'

助けてください、どんなフィードバックでも大歓迎です。GROUP BY を使用してクエリを作成することは許可されていないことに注意してください。

4

3 に答える 3

0

がなくGROUP BYても、相関サブクエリを使用して実行できます。

SELECT *
FROM (
  SELECT DISTINCT pr.employeeId,
         (SELECT COUNT(*) FROM ProjectRessources pr2 WHERE pr2.employeeId = pr.employeeId) nbProjects 
  FROM ProjectRessources pr
) t
WHERE nbProjects > 1

変更projectIdごとに sが重複する場合は、次のようにします。employeeIdCOUNT(*)

SELECT COUNT(DISTINCT projectId) FROM ...

MySql のバージョンが 8.0 以降でprojectId、各 に重複する sがない場合は、ウィンドウ関数employeeIdを使用して実行できます。COUNT(*)

SELECT *
FROM (
  SELECT DISTINCT employeeId,
         COUNT(*) OVER (PARTITION BY employeeId) nbProjects 
  FROM ProjectRessources pr
) t
WHERE nbProjects > 1

デモを参照してください。
結果:

> employeeId | nbProjects
> ---------: | ---------:
>       1876 |          2
>       2231 |          2
于 2021-01-02T17:31:51.937 に答える