簡體   English   中英

每個GROUP BY的總行數

[英]Total Rows From Each GROUP BY

我正在嘗試運行MySQL查詢並使用PHP執行以下操作:

我需要在一列(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%

你可能需要為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

如果這是Oracle,我建議使用分析,但我不確定MySQL中是否存在等價物。 也就是說,在您的情況下,一個簡單的子查詢應該可以解決問題,它應該適用於任何SQL數據庫。

這是我在嘗試上述操作后最終做的事情:

$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 "...";

                    }

                }

像這樣的東西:

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM