COUNT() и SUM() в одном запросе с GROUP BY. yii2

130
03 апреля 2019, 19:20

нужно сделать в одном запросе count и sum. запрос примерно такой:

UsersPays::find()
    ->where([
        'and',
        ['=', 'users_pays.status', '1'],
        ['=', 'users_pays.active', '1'],
        ['=', 'users_pays.pay_type_id', '1'],
    ])
    ->groupBy('users_pays.card_id')

Теперь самое интересное: если я добавляю к запросу ->count('users_pays.id') или ->sum('users_pays.money) то считает все нормально. но получается два запроса. yii генерирует что-то вроде этого:

SELECT COUNT(*) FROM (SELECT `users_pays`.* FROM `users_pays` 
WHERE (`users_pays`.`status` = '1') 
  AND (`users_pays`.`active` = '1') 
  AND (`users_pays`.`pay_type_id` = '1') 
GROUP BY `users_pays`.`card_id`) `c`

когда в yii пишу так:

    UsersPays::find()
    ->select('COUNT(users_pays.id) as count, SUM(users_pays.money) as sum')
    ->where([
        'and',
        ['=', 'users_pays.status', '1'],
        ['=', 'users_pays.active', '1'],
        ['=', 'users_pays.pay_type_id', '1'],
    ])
    ->groupBy('users_pays.card_id')

yii генерирует такой запрос:

SELECT COUNT(users_pays.id), SUM(users_pays.money)
FROM `users_pays` 
WHERE (`users_pays`.`status` = '1') 
  AND (`users_pays`.`active` = '1') 
  AND (`users_pays`.`pay_type_id` = '1') 
GROUP BY `users_pays`.`card_id`

в ответе приходит не сумма и количество по всей таблице, а массив с суммой и количеству по каждому card_id

подскажите как правильно сделать?

READ ALSO
Как закрыть чат-окно ботом на facebook?

Как закрыть чат-окно ботом на facebook?

Пишу бота на PHP и возник вопрос, а можно ли закрыть диалоговое окно после определенной команды? Чтобы после ответа клиента бот закрывал каким...

171
Как вырезать текст между скобочками в php

Как вырезать текст между скобочками в php

Есть текстВ нем есть скобки

193
Как правильно перестроить запрос в yii2?

Как правильно перестроить запрос в yii2?

как перестроить такой запрос под findOne()?

206
Ошибка в отправке письма на почту

Ошибка в отправке письма на почту

Есть такой код отправки содержимого корзины на мылоПочему каждый товар отправляется своим письмом (например, если в корзине 3 товара = 3 отдельных...

184