Mysql 陷入sql查询

Mysql 陷入sql查询,mysql,Mysql,我正在做最后一个项目,这是一个返回所有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 结果样本E: id name day 9977 SCOTT, RAYMOND

我正在做最后一个项目,这是一个返回所有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
结果样本E:

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的列表以及名称+日期组合的计数

上述示例应产生:

9977    1
9467    3
9468    3
9493    3
9538    1
9539    1
9554    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;

在不了解模式的情况下,很难确定什么是最佳查询;但本质上是,您需要计算子查询中每天的计数,然后将结果与表连接以生成所需的输出。例如:

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)

你的查询执行了,但是总数很大——不是1、2、3或4,而是160、220、190等。我检查了你的测试数据,从(id、姓名、日期)记录开始,这次的数字是正确的。