Как сделать несколько COUNT в одном запросе?

СУБД: MySQL 8.0.29

Есть таблица:

CREATE TABLE orders ( id INT, userId INT, tripType varchar(255) );
INSERT INTO `orders` (`id`, `userId`, `tripType`) VALUES
(1, 1, 'way'), (2, 2, 'way'), (3, 3, 'way'),
(4, 1, 'on-road'), (5, 2, 'on-road'), (6, 3, 'way');
SELECT * FROM orders;

Как посчитать сколько пользователь выполнил заказов всего и сколько по типам, в одной выборке?

Например, чтобы узнать, сколько всего, я делаю группировку по пользователю:

SELECT userId, COUNT(*) totalOrders FROM orders GROUP BY 1

Чтобы узнать, сколько по типам:

SELECT userId, tripType, COUNT(*) totalOrderByTripType FROM orders GROUP BY 1, 2

Хочу увидеть сумму по странам и сумму по типам:

введите сюда описание изображения

Пример.


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Используйте WITH ROLLUP чтоб сделать свертки существующих групп и HAVING GROUPING(...) чтоб отсеять ненужные свертки:

SELECT userId, tripType, COUNT(*) totalOrderByTripType
FROM orders 
GROUP BY 1, 2 
WITH ROLLUP
HAVING GROUPING(userId) = 0
→ Ссылка