2011-11-07 65 views
0

我试图运行MySQL查询并使用PHP来做到以下几点:的行总数从每个GROUP BY

我需要组数据在列(GROUP BY),再算上(COUNT)的数量每组中的行。之后,我需要将给定组中的行数除以组的数量以获得该组的流行度。

所以,如果我有一个表具有以下数据:

Version_Number 
1.1 
1.2 
1.1 
1.2 
1.2 
1.1 

I need the final output to be: 

1.1 50% 
1.2 50% 

回答

1

这是我最后做尝试上述后:

$result = mysql_query("SELECT COUNT(*) AS nsites FROM table WHERE auth = '$auth'") or 
        die(mysql_error()); 
        $return_sites = mysql_fetch_array($result); 

       if (!$return_sites['nsites']) { 

       echo "..."; 

       } else { 

        $esult = mysql_query("SELECT * FROM table WHERE auth = '$auth' GROUP BY theme_version") or die(mysql_error()); 
        while($row = mysql_fetch_array($esult)){       

         $get_current_version = $row['theme_version']; 

         $vresult = mysql_query("SELECT COUNT(*) AS nversion FROM table WHERE auth = '$auth' AND theme_version = '$get_current_version'") or die(mysql_error()); 
         $version = mysql_fetch_array($vresult); 

         $percent = round($version['nversion']/$return_sites['nsites'] * 100); 

          echo "..."; 

        } 

       } 
0

事情是这样的:

select v."Version_Number", count(v."Version_Number"),count(v."Version_Number")::float/(select count(v2."Version_Number")::float from versions v2)::float * 100::float 
from versions as v 
group by v."Version_Number" 
+0

这可能是错的,我不认为你可以加入这样的选择:\ – Louis

+0

那现在工作(从Postgres)你可能需要为mysql感到遗憾。 – Louis

1

您可能需要调整这个为MySQL(我通常在Oracle工作),但是:

SELECT 
    (count(*)/totalCount * 100) AS percentOfVersionedThings 
    , Version_Number 
FROM tableOfVersionedThings 
    INNER JOIN (SELECT count(*) as totalCount FROM tableOfVersionedThings) ON 1=1 
GROUP BY Version_Number 

如果这是甲骨文,我建议使用分析,但我不知道是否有在同等我SQL。这就是说,在你的情况下,一个简单的子查询应该可以解决问题,并且它应该可以在任何SQL数据库上使用。