используя group by и count и где запрос вместе в Laravel - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в Laravel, поэтому заранее прошу прощения, если мой вопрос прост.У меня есть таблица (table1), которая имеет 3 столбца (ID, V, результат), что-то вроде этого:

ID---------v---------result
1----------123---------True
1----------123---------True
1----------123---------false
2----------123---------false
2----------123---------True
2----------123---------error

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

ID--------numOfT---------numOfF--------other
1----------2---------------1------------0
2----------1---------------1------------1

Я думаю, что я должен использовать group по и count и где , что-то вроде этого:$ table2 = DB :: table ('table1') -> groupBy ('ID') -> -> count ();но я не знаю точный запрос.Любая идея, как я могу получить table2?

1 Ответ

0 голосов
/ 24 октября 2018

Вот один необработанный запрос MySQL, который будет удовлетворять вашим требованиям с использованием условного агрегирования:

SELECT
    ID,
    COUNT(CASE WHEN result = 'True'  THEN 1 END) AS numOfT,
    COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF,
    COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other
FROM table1
GROUP BY
    ID;

Соответствующий код Laravel может выглядеть следующим образом:

$result = DB::table('table1')
    ->select('ID',
             DB::raw('COUNT(CASE WHEN result = 'True' THEN 1 END) AS numOfT'),
             DB::raw('COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF'),
             DB::raw('COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other'))
    ->groupBy('ID')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...