0

我想连接并计算同一列的数据,所以我可以连接但我不能计算重复的数据。见下表

创建表的查询:

    如果存在 `tb_presence`,则删除表;
创建表`tb_presence`(
  `code_presence` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `licao_study` varchar(10) NOT NULL,
  `fk_number_lesson` varchar(4) NOT NULL,
  主键(`code_presence`)
) 引擎=InnoDB AUTO_INCREMENT=35 默认字符集=utf8;
开始;
插入`tb_presence`值('1','0.5','2'),('2','0','2'),('3','0.5','1'),(' 4', '1', '3'), ('5', '1', '2'), ('6', '0.5', '1'), ('7', '0.5', ' 3'), ('8', '0', '3'), ('9', '1', '1'), ('10', '1', '3'), ('11' , '1', '1'), ('12', '0', '2'), ('13', '1', '3'), ('14', '0', '3' ), ('16', '0', '1'), ('17', '1', '2'), ('18', '0.5', '2'), ('19', ' 1', '2'), ('20', '0.5', '3');
犯罪;
设置 FOREIGN_KEY_CHECKS = 1;

现在,在我用来连接数据的查询下方。

    选择 fk_number_lesson 作为课程,
GROUP_CONCAT( licao_study ORDER BY licao_study ) 作为学习

FROM tb_presence
按 fk_number_lesson 分组;

结果:*看到查询可以连接数据:

课程学习
1 0,0.5,0.5,1,1
2 0,0,0.5,0.5,1,1,1
3 0,0,0.5,0.5,1,1,1

现在,我想“计算”相同的数据并保持数据连接。我的愿望是添加“计数”,结果如下所示:

课程学习obs(计数)
1 1,2,1 (1=0) (2=0.5+0.5) (2=1+1)
2 2,2,3 (2=0+0) (2=0.5+0.5) (3=1+1+1)
3 2,2,3 (2=0+0) (2=0.5+0.5) (3=1+1+1)

*column obs 只是演示,这不是我想要的结果

是否可以进行这样的查询?
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _

今天
在你帮助解决的上述案例中,我有所有预期的结果,例如。“第 1 课”列至少有一次结果 (0,05,1),然后连接和计数将是 (1,1,1)

但是当查询结果缺少某些地方没有响应时,例如。“第 2 课”只是结果 (0,1),连接将是 (1,1)。

当 Select 的结果如下所示时,我喜欢它:

课程学习
1 0,0.5,0.5,1,1 这一行是完整的有3个结果
2 0.5,0.5,1,1,1 这行没有全部结果,只有0.5和1
3 0,0,1,1,1 这行没有全部结果,只有0.5和1

您查询的结果如下所示:

课程学习obs(计数)
1 1,2,1 (1=0) (2=0.5+0.5) (2=1+1)
2 2,3 (2=0.5+0.5) (3=1+1+1) 3 2,3 (2=0+0) (3=1+1+1)

但我希望它没有当这些结果中的一些(0、0.5、1)在课程中,查询添加“0”到位:见下文

课程学习obs(计数)
1 1,2,1 (1=0) (2=0.5+0.5) (2=1+1)
2 0,2,3(加“0”零)(2=0.5+0.5)(3=1+1+1) 3 2,3 (2=0+0) (加“0”零) (3=1+1+1)

那可能吗?

4

2 回答 2

0
select lesson,GROUP_CONCAT(study) as study from
(
    SELECT fk_number_lesson AS lesson,
count( licao_study ) AS study
FROM tb_presence
GROUP BY fk_number_lesson,licao_study
) as t group by lesson;

编辑 :

select lesson,GROUP_CONCAT(study) as study from
(
    select t1.lesson,t2.licao_study,coalesce(study,0) as study from 
    (
        select distinct fk_number_lesson as lesson,n from tb_presence,
    (
        select 0 as n union all select 0.5 union all select 1.0
    ) as t
    ) as t1 left join 
    (
        SELECT fk_number_lesson AS lesson,licao_study,
    count( licao_study ) AS study
    FROM tb_presence
    GROUP BY fk_number_lesson,licao_study
    ) as t2
        on t1.n=t2.licao_study and t1.lesson=t2.lesson 
) as t group by lesson;
于 2013-11-06T13:16:48.170 回答
0

只计算列中重复的单词

选择 column_name, count(*) from table_name group by column_name

于 2013-11-06T13:09:18.910 回答