-1

私は最終的なプロジェクトに取り組んでいます。これは、すべての ID、名前、および日のリストを返すクエリです。

select 
 c.id as id, i.full_name as n, day as d
 from
 (instructors i
 inner join courses c ON c.instructor_id = i.id)
 inner join exam_schedules e ON c.id = e.course_id

結果サンプル:

id  name    day
9977    SCOTT, RAYMOND C.   wednesday
9467    FERNANDEZ, CYNTHIA E.   wednesday
9468    FERNANDEZ, CYNTHIA E.   wednesday
9493    FERNANDEZ, CYNTHIA E.   wednesday
9538    STEPHENS, RONNIE T. wednesday
9539    MYERS, RONNIE Y.    wednesday
9554    GARRISON, EUGENE A. wednesday

すべての ID のリストと name+day の組み合わせの数を取得するにはどうすればよいですか?

上記の例では、以下が生成されます。

9977    1
9467    3
9468    3
9493    3
9538    1
9539    1
9554    1
4

2 に答える 2

1

わかりやすくするために一時テーブルを使用しました。これを 1 つのクエリにマージすることは可能ですが、実際のスキーマなしで行うのは非常に困難です。

CREATE TABLE tmp2 ( id int, name_day varchar(80) );

INSERT INTO tmp2 (id, name_day) (SELECT c.id AS id, CONCAT(i.full_name, i.day) AS name_day
     FROM (instructors i
         INNER JOIN courses c ON c.instructor_id = i.id)
         INNER JOIN exam_schedules e ON c.id = e.course_id
         );

SELECT id, counter FROM 
    (SELECT name_day, count(*) AS counter FROM tmp2 GROUP BY name_day) AS t1
    INNER JOIN
    tmp2
    ON t1.name_day = tmp2.name_day;

DROP TABLE tmp2;
于 2012-05-26T06:27:51.290 に答える
0

スキーマを知らなければ、最適なクエリを特定することは困難です。しかし本質的には、サブクエリで毎日のカウントを計算し、その結果をテーブルと結合して目的の出力を生成する必要があるということです。例えば:

SELECT   c.id, ctbl.total
FROM     instructors    AS i
  JOIN   courses        AS c ON c.instructor_id = i.id
  JOIN   exam_schedules AS e ON e.course_id     = c.id
  JOIN (
    SELECT   day
      ,      COUNT(*) AS total
    FROM     instructors    AS i
      JOIN   courses        AS c ON c.instructor_id = i.id
      JOIN   exam_schedules AS e ON e.course_id     = c.id
    GROUP BY day
  ) AS ctbl USING (day)
于 2012-05-26T06:37:20.953 に答える