2

1 日あたりの総学生数に関するレポートを実行する必要があります。私が抱えている問題は、サブクエリで適切なグループ化を行うことができないため、その日のうちに特定の理由で何人来たかを知りたいということです。

私のクエリは次のとおりです。

SELECT 
     DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
     COUNT(session.session_id) 'Total', 
     (SELECT COUNT(aidyear) FROM session WHERE aidyear = '12-13') '12-13',         
     (SELECT COUNT(aidyear) FROM session WHERE aidyear = '13-14') '13-14' 
FROM session 
WHERE status = '3' 
GROUP BY Date;

結果のレポートは次のとおりです。

+-------------+-------+-------+-------+
| Date        | Total | 12-13 | 13-14 |
+-------------+-------+-------+-------+
| Apr 15 2013 |    47 |    38 |    25 |
| Apr 16 2013 |     5 |    38 |    25 |
+-------------+-------+-------+-------+
2 rows in set (0.00 sec)

お気づきのように、2013 年 4 月 16 日の生徒数は合計 5 人のみです。ここで、両方の行の 12-13 13-14 が同一であることに注意してください。

サブクエリ内でグループ化しようとすると、次のエラーが発生します。

エラー 1241 (21000): オペランドには 1 列を含める必要があります

私の理解では、サブクエリが複数の行を返していることを意味します。

私はこのクエリで試しました:

SELECT 
      DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
      COUNT(session.session_id) 'Total', 
      (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
      COUNT(aidyear) FROM session WHERE aidyear = '12-13' GROUP BY Date) '12-13',   
      (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, COUNT(aidyear) FROM session WHERE aidyear = '13-14' GROUP BY Date) '13-14' 
FROM session WHERE status = '3' 
GROUP BY Date;

編集1エヴァンの要求による

クエリを実行しているテーブルは、セッション テーブルのみです。私は参加しません(あなたが気づいたように)

表には次のものがあります。

Primary Key : session_id
Foreign Key : anum(which is a student ID)

次に、次のようになります。 why, aidyear, signintime, studentcomments, status

4

1 に答える 1

3

CASE集約でa を使用できるはずです:

SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
  COUNT(session.session_id) 'Total', 
  sum(case when aidyear = '12-13' then 1 else 0 end) '12-13',
  sum(case when aidyear = '13-14' then 1 else 0 end) '13-14'
FROM session 
WHERE status = '3' 
GROUP BY Date;
于 2013-04-16T13:38:29.093 に答える