1

学生の名前、電子メール、役職など、および「ステータス」(Y または N のいずれか) を含むテーブルがあります。各タイプの役職の数をカウントするクエリを作成したいと考えています。 、および JOIN を使用した各タイプ内の Y の数 AND N の数。(つまり、Position、StatusIsYes、StatusIsNo の 3 つの列を持つテーブルになります。)

次の方法で CASE 句を使用して既にこれを行っていますが、JOIN 句を使用してそれを行う方法がわかりません。

SELECT position,
COUNT(CASE WHEN status = 'Y' THEN 1 ELSE NULL END) AS StatusIsYes,
COUNT(CASE WHEN status = 'N' THEN 1 ELSE NULL END) AS StatusIsNo
 FROM 
students GROUP BY crd

提案に感謝します!

編集: JOIN を使用せずに実行できることはわかっていますが、JOIN を使用してそれ実行する方法を知りたいです。

4

3 に答える 3

2

結合する必要はありません:

SELECT
    position,
    SUM(status = 'Y') AS StatusIsYes,
    SUM(status = 'N') AS StatusIsNo
FROM students
GROUP BY position

CASEmysql では (のみ) trueis1およびfalseis0であるためsum()、かなりファンキーな の分配に注意してください。

于 2013-01-11T14:08:43.097 に答える
1

同じテーブルからレコードを取得したい場合は、 SELF JOIN を使用できます。
例:
テーブル名: 従業員
フィールド: EmpId,EmpName,ManagerId
マネージャーのポジションにいる従業員の詳細を取得する場合は、次のようなクエリを記述する必要があります:
SELECT e1.EmpId, e1.EmpName FROM EmployeeDetails e1 、EmployeeDetails e2 where e1.EmpId=e2.ManagerId;

それがあなたを助けることを願っています。

詳細については、このリンクを確認してください。

于 2013-01-11T14:32:14.207 に答える
1

試す ::

SELECT 
position,
COUNT(status = 'Y' ) AS StatusIsYes,
COUNT(status = 'N' ) AS StatusIsNo
 FROM 
students GROUP BY POSITION
于 2013-01-11T14:09:42.363 に答える