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

Таблица моих ответов

     user_id         question_id      option(selected by user)
     1                       1                             2
     2                       1                             1
     3                       1                             4
     4                       1                             3

Теперь я хочу достичь

  question1
     option1(25% people selected option1)
     option2(25% people selected option2)
     option3(25% people selected option3)
     option4(25% people selected option4) 

Каким должен быть запрос для вышеуказанного вывода? Может ли кто-нибудь помочь в этом, пожалуйста.

4
user8203594 26 Июл 2017 в 07:58

1 ответ

Лучший ответ

Попробуй это,

Вы получите процентное соотношение каждого варианта для вопроса с question_id = 1

DB::table('answers')->where('question_id',1)
    ->select('option',DB::raw('count(*) *100 / (select count(*) from answers) as count'))
    ->groupBy('option')
    ->get();
2
Sagar Gautam 26 Июл 2017 в 09:41
Он говорит синтаксическая ошибка, неожиданная ')' во второй строке.
 – 
user8203594
26 Июл 2017 в 08:29
Я обновил, попробуйте обновить, раньше была синтаксическая ошибка из-за опечатки
 – 
Sagar Gautam
26 Июл 2017 в 08:33
Нет @Sagar Gautam В обновленном ответе также есть ошибка, в нем говорится: SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с опцией ') * 100 / (выберите COUNT (*) из ответов) как отсчет от answers где qu' at line 1 (SQL: select option , COUNT(option) * 100 / (select COUNT(*) from answers) as count from ответы`, где question_id = 1 группа по option)
 – 
user8203594
26 Июл 2017 в 08:40
Я думаю, что запрос кажется правильным, и я не знаю, почему не проснулся. Я снова добавил фигурные скобки и обновил. Попробуйте, пожалуйста.
 – 
Sagar Gautam
26 Июл 2017 в 08:50
Нет @Sagar Gautam, на этот раз тоже не сработало. Снова та же ошибка SQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с опцией ') * 100 / (выберите COUNT (*) из ответов)) как отсчет от answers где q' at line 1 (SQL: select option , (COUNT(option) * 100 / (select COUNT(*) from answers)) as count from отвечает` где question_id = 1 группа по option пределу 1)
 – 
user8203594
26 Июл 2017 в 08:58