SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` varchar(255) DEFAULT NULL,
  `category` varchar(255) DEFAULT NULL,
  `series` varchar(255) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('7', '医学', '检验类', '检验科管理');
INSERT INTO `test` VALUES ('8', '医学', '影像类', '医学影像学');
INSERT INTO `test` VALUES ('9', '医学', '中医类', '中医妇科');
INSERT INTO `test` VALUES ('25', '医学', '内科', '消化内科');
INSERT INTO `test` VALUES ('54', '医学', '内科', '消化内科');
INSERT INTO `test` VALUES ('55', '卫生学', '卫生类', '精神卫生');
INSERT INTO `test` VALUES ('75', '医学', '影像类', '医学影像学');
INSERT INTO `test` VALUES ('102', '医学', '中医类', '中医内科');
INSERT INTO `test` VALUES ('107', '工程学', '化学类', '材料学、化学');
INSERT INTO `test` VALUES ('119', '工程学', '化学类', '化学电源');
INSERT INTO `test` VALUES ('120', '工程学', '化学类', '化学电源');
INSERT INTO `test` VALUES ('121', '工程学', '化学类', '电化学');
INSERT INTO `test` VALUES ('122', '电学', '计算机类', '计算机专业');
INSERT INTO `test` VALUES ('123', '电学', '机电类', '机电工程');
INSERT INTO `test` VALUES ('124', '教育学', '教育类', '电子专业教学');
INSERT INTO `test` VALUES ('125', '审计学', '审计类', '财务管理和内部审计');
INSERT INTO `test` VALUES ('127', '医学', '口腔科', '口腔医学');
INSERT INTO `test` VALUES ('128', '医学', '口腔科', '口腔医学');
INSERT INTO `test` VALUES ('129', '医学', '传染科', '感染性疾病');
INSERT INTO `test` VALUES ('130', '医学', '传染科', '感染性疾病');
INSERT INTO `test` VALUES ('131', '工程学', '生物类', '分子生物学');
INSERT INTO `test` VALUES ('132', '卫生学', '检疫类', '检验检疫');
INSERT INTO `test` VALUES ('139', '医学', '口腔科', '口腔医学');
INSERT INTO `test` VALUES ('140', '医学', '传染科', '感染性疾病');
INSERT INTO `test` VALUES ('141', '医学', '传染科', '感染性疾病');
INSERT INTO `test` VALUES ('142', '医学', '中医类', '中医内科');
INSERT INTO `test` VALUES ('143', '医学', '中医类', '中医内科');
INSERT INTO `test` VALUES ('144', '医学', '药剂类', '医院药学');
mysql如何实现结果如下:
category series  serNum    subject           subNum     count(*) total
医学 中医类   7      中医内科            2         3 17
医学 中医类   7      中医妇科            2         1 17
医学 传染科   7      感染性疾病   1         4 17
医学 内科   7      消化内科            1         2 17
医学 口腔科   7      口腔医学            1         3 17
医学 影像类   7      医学影像学   1         2 17
医学 检验类   7      检验科管理   1         1 17
医学 药剂类   7      医院药学            1          1 17
卫生学 卫生类   2      精神卫生            1         1 2
卫生学 检疫类   2      检验检疫            1         1 2
审计学 审计类   1      财务管理和内部审计   1         1 1说明:serNum 指 按category 统计并合并了相同的series个数
subNum 指 按series 统计并合并了相同的subject 个数
total指 每一类category 的总数

解决方案 »

  1.   

    SELECT * FROM test;
    SELECT a.category,a.series,a.SUBJECT,
    (SELECT COUNT(DISTINCT series) FROM test WHERE a.category=category) AS serNum,
    (SELECT COUNT(DISTINCT SUBJECT) FROM test WHERE a.category=category AND a.series=series) AS subNum ,
    (SELECT COUNT(*) FROM test WHERE a.category=category) AS total,
    (SELECT COUNT(*) FROM test WHERE a.category=category AND a.series=series AND a.`subject` =`subject` ) AS subNum1
     FROM test a GROUP BY a.category,a.series,a.SUBJECT