mysql语句如何一行显示求助

有一个需求,根据is_come和section字段,按teacher和room分组选取出第1节、第2节课来和没来的学生,要求用一行显示,如图:



测试用的表结构和数据:
CREATE TABLE `come`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `room` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `student` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `is_come` int(255) NULL DEFAULT NULL COMMENT '0缺席,1出席',
  `section` int(255) NULL DEFAULT NULL COMMENT '节数,只有1和2,即代表第一节或第二节',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `come` VALUES (1, '老师A', '101', '学生x', 1, 1);
INSERT INTO `come` VALUES (2, '老师A', '101', '学生y', 0, 1);
INSERT INTO `come` VALUES (3, '老师A', '101', '学生z', 0, 1);
INSERT INTO `come` VALUES (4, '老师A', '101', '学生x', 0, 2);
INSERT INTO `come` VALUES (5, '老师B', '202', '学生n', 0, 1);


#MySQL#
全部评论
SELECT DISTINCT teacher,room,student FROM come WHERE section=1&nbs***bsp;section=2 AND(is_come=1) GROUP BY teacher,room,student HAVING COUNT(section)>1 ORDER BY teacher,room,student // where 找出  section=1&nbs***bsp;section=2 AND(is_come=1) 即第一节课和第二节课去上的数据 //GROUP BY teacher,room,student 对上面数据进行分组 // HAVING COUNT(section)>1指的是分组下 section大于1就是存在section=1 和section=2都是的学生  // ORDER BY teacher,room,student 按你要求排序 //SELECT DISTINCT teacher,room,student 分组数据取 DISTINCT
点赞 回复
分享
发布于 2020-02-13 19:33

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务