Группировка по двум значениям - PullRequest
0 голосов
/ 10 декабря 2018

Здравствуйте, у меня есть эта таблица: (id, carId, gasStationId, литры, totalPrice).Я хотел бы создать запрос на общую сумму затрат на каждой заправке на машине.Я знаю, как суммировать общие расходы по АЗС, но я не знаю, как группировать по машине.Вот мой запрос:

select sum(totalPrice) as totalCosts
     , count(*) as countPurchases
     , g.name
     , p.carId 
  from purchase as p
  join gas_station as g  
    on g.id = p.id
 group 
    by gasStationId

Я бы хотел получить такой результат:

┌─────────────┬──────┬──────┐
│ GasStation1 │ Car1 │ 1000 │
├─────────────┼──────┼──────┤
│ GasStation1 │ Car2 │ 1500 │
│ GasStation2 │ Car2 │  500 │
│ GasStation2 │ Car1 │  700 │
└─────────────┴──────┴──────┘

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Хорошей идеей является использование оконных функций: https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html

что-то вроде:

SELECT
     gasStationId,
     SUM(totalPrice) OVER(PARTITION BY carId) AS price_by_car
   FROM purchase p
   JOIN gasStations g
   ON g.id=p.gassStationId;
0 голосов
/ 10 декабря 2018

Это то же самое, просто добавьте p.carId к группе, разделенной запятой:

GROUP BY gasStationId, p.carId

Так что для результатов по вашему вопросу вы можете сделать:

SELECT g.name, p.carId, SUM(totalPrice) AS totalCosts
FROM purchase AS p
JOIN gas_station AS g ON g.id = p.id
GROUP BY gasStationId, p.carId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...