Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 每个人的计数技能_Mysql_Sql_Count - Fatal编程技术网

Mysql 每个人的计数技能

Mysql 每个人的计数技能,mysql,sql,count,Mysql,Sql,Count,我正在尝试创建一个维恩图。我已经有了使用d3js的javascript。我现在需要的是以下内容 有三张桌子 Person (id_person, name_person) Skill (id_skill, name_skill) Person_Skill(id_person, id_skill) 如何计算每个id_技能子集(使用sql)的人数 我编写了这个php脚本来创建所有的id_技能集 function powerSet($in, $minLength = 1) { $count

我正在尝试创建一个维恩图。我已经有了使用d3js的javascript。我现在需要的是以下内容

有三张桌子

Person (id_person, name_person)
Skill (id_skill, name_skill)
Person_Skill(id_person, id_skill)
如何计算每个id_技能子集(使用sql)的人数

我编写了这个php脚本来创建所有的id_技能集

 function powerSet($in, $minLength = 1) { 
   $count = count($in); 
   $members = pow(2,$count); 
   $return = array(); 
   for ($i = 0; $i < $members; $i++) { 
      $b = sprintf("%0".$count."b",$i); 
      //$out = array(); 
      $member = '';
      for ($j = 0; $j < $count; $j++) { 
         if ($b{$j} == '1') $member .= $in[$j]. ","; 
      } 
      if($member != '') $out = $member;
      if (count($out) >= $minLength) { 
         $return[] = $out; 
      } 
   } 
   return $return; 
} 

我喜欢在子句中使用匹配所有ID。数据库是MYSQL,您可以使用聚合字符串连接为每个人生成ID集。然后你可以数一数

每个数据库都有不同的聚合字符串连接方式。下面显示了对此的MySQL查询:

select skills, count(*) as cnt
from (select sk.id_person, group_concat(distinct sk.id_skill order by sk.id_skill) as skills
      from person_skill sk
      group by sk.id_person
     ) ps
group by skills;

我编辑过,是mysql。但是如果sql能在任何数据库中工作,那就太好了,我不敢相信它这么简单(如果你知道sql的话):D这将提高我代码的效率。我想为每个子集运行一个查询,现在它们都完成了。谢谢!
select skills, count(*) as cnt
from (select sk.id_person, group_concat(distinct sk.id_skill order by sk.id_skill) as skills
      from person_skill sk
      group by sk.id_person
     ) ps
group by skills;