Всего строк из каждой группы BY - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь выполнить запрос 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%

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

Возможно, вам придется настроить это для 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.

1 голос
/ 10 ноября 2011

Это то, что я в конечном итоге сделал после попытки выше:

$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 голосов
/ 07 ноября 2011

Примерно так:

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