Как рассчитать проценты, основываясь на aspirasi_id - PullRequest
0 голосов
/ 14 мая 2018
Select aspirasi_id
     , aspirasi_option_id
     , (Count(aspirasi_option_id)* 100 / 
           (Select Count(*) 
              From aspirasi_choices)
       ) as total 
  From aspirasi_choices  
 GROUP 
    BY aspirasi_option_id

выход

неправильное значение

Как я могу сделать за карту, его общее количество не в соединении.

пример истинное значение

спасибо, прежде чем

таблица

my expectations
aspirasi_id     | aspirasi_option_id | total 
---------+----------+-------
 52             | 6        |  100.00% 
 53             | 5        |  50.00% 
 53             | 4        |  50.00% 
 
Reality 
aspirasi_id     | aspirasi_option_id | total 
---------+----------+-------
 52             | 6        |  33.33% 
 53             | 5        |  33.33% 
 53             | 4        |  33.33% 

1 Ответ

0 голосов
/ 14 мая 2018

Я думаю, вам нужно, чтобы процент делился на aspirasi_id, добавьте предложение where в ваш подзапрос, например WHERE aspirasi_id = a.aspirasi_id

SELECT 
  a.aspirasi_id,
  a.aspirasi_option_id,
  (
    COUNT(aspirasi_option_id) * 100 / 
    (SELECT 
      COUNT(*) 
    FROM
      aspirasi_choices 
    WHERE aspirasi_id = a.aspirasi_id)
  ) AS total 
FROM
  aspirasi_choices a 
GROUP BY a.aspirasi_id,
  a.aspirasi_option_id 

Демо

Или с помощью объединения вы можете переписать выше, как

SELECT 
  a.aspirasi_id,
  a.aspirasi_option_id,
  COUNT(aspirasi_option_id) * 100 / b.inner_total AS total 
FROM
  aspirasi_choices a 
  JOIN (SELECT 
      aspirasi_id,
      COUNT(*) AS inner_total 
    FROM
      aspirasi_choices 
    GROUP BY aspirasi_id) b USING (aspirasi_id) 
GROUP BY a.aspirasi_id,
  a.aspirasi_option_id 

Демо

...