MYSQL Соединить 3 таблицы и рассчитать совокупный процент - PullRequest
0 голосов
/ 13 сентября 2018

Я испытываю ошибки, пытаясь вычислить совокупный балл группы из таблицы ниже:

group_details:
id      name
=====================
1       Group 1
2       Group 2
3       Group 3

group_members:
id      group_id  
======================
1       1           
2       1           
3       2       
4       2       
5       3     

answers:
id      member_id   is_correct      
=================================
1       1           1        
2       1           0      
3       2           1          
4       2           1         
5       3           1          
6       3           0
7       4           0          
8       4           1         

Я пытаюсь добиться этого:

Group Name            Total Members     Total Score (%)
==============================================
Group 1                  2              75.00
----------------------------------------------
Group 2                  2              50.00
---------------------------------------------- 
Group 3                  1              0
---------------------------------------------- 

Я получаю пустой результатвернулся, когда я запустил запрос.Пожалуйста, смотрите мои коды ниже.

 SELECT 
    ((SUM(a.is_correct) / (2 * SUM(m.id))) * 100)  as cummulative_score,
    SUM(m.id) as total_members,
    g.name
  FROM
    `group_details` AS g 
    LEFT JOIN `group_members` m 
      ON m.group_id = g.id
    LEFT JOIN `answers` a 
      ON a.member_id = m.id 
  WHERE a.is_correct = 1
  GROUP BY g.id;

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Измените «LEFT JOIN answer a» на «LEFT JOIN answers a», и это должно сработать.

Также я рекомендую избегать псевдонимов, потому что вы не делаете ничего хорошего в переименовании таблиц, временно в «a»,«g» или что-то в этом роде, это действительно сбивает с толку всех и делает отладку / анализ запросов очень сложным.Также вы должны использовать MySQL-клиент, чтобы выделить такие ошибки, как MySQL Workbench или что-то подобное.

0 голосов
/ 13 сентября 2018

Этот запрос даст вам результаты, которые вы хотите.Обратите внимание, что на основе имен таблиц в вашем вопросе я использовал answers в качестве таблицы ответов, если она на самом деле называется answer, вам нужно изменить это JOIN.

SELECT 
    g.name,
    COUNT(DISTINCT m.id) AS `Total Members`,
    ROUND(COALESCE(AVG(a.is_correct), 0) * 100, 2) AS `Total Score (%)`
  FROM
    `group_details` AS g 
    LEFT JOIN `group_members` m 
      ON m.group_id = g.id
    LEFT JOIN `answers` a 
      ON a.member_id = m.id 
  GROUP BY g.id

Вывод:

name        Total Members   Total Score (%)     
Group 1     2               75.00
Group 2     2               50.00
Group 3     1               0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...