объединение таблиц, запрос по дате, поля сумм и группировка по - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть две таблицы (fuel и bus_mileage). Общим знаменателем является имя автобуса.

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

(fuel) есть эти поля

  • ID
  • автобус
  • дата
  • литров
  • net
  • НДС
  • Брутто

(bus_mileage) имеет эти поля

  • id
  • шина
  • дата
  • поездка
  • сервис
  • начальный пробег
  • конечный пробег
  • nailsea_user
  • clevedon_user
  • portishead_user
  • other_user
  • total_miles
  • total_journeys

Мой запрос:

SELECT
  f.ID,
  f.bus,
  f.litres,
  f.Gross,
  fuel,
  b.id,
  b.bus,
  b.total_miles,
  b.total_journeys bus_mileage SUM(total_miles) as 'total_miles',
  SUM(total_miles * 1.60) as 'total KM',
  (SUM(portishead_user) + SUM(clevedon_user) + SUM(nailsea_user) + SUM(other_user)) as 'Total Journeys' SUM(litres) as 'fuel Litres',
  SUM(Gross) as 'Gross Value',
  SUM(net) as 'Net Value',
  SUM(VAT) as 'VAT Value',
  (SUM(litres) / SUM(Gross)) as 'Total MPG'
FROM fuel f
INNER JOIN bus_mileage b on f.bus = b.bus
WHERE date BETWEEN '2019-09-01' AND '2020-03-31'
group by bus 

1 Ответ

0 голосов
/ 24 апреля 2020

Предполагая, что каждая таблица имеет более одной строки на шину и дату, основная идея заключается в агрегировании в подзапросах, а затем их объединении.

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

select f.bus, f.bus_date, f.fuel_usage, m.mileage 
from (
    select bus, date(fuel_date) bus_date, sum(litres) fuel_usage
    from fuel f
    group by bus, date(fuel_date)
) f
inner join (
    select bus, date(mileage_date) bus_date, sum(end_mileage - start_mileage) mileage
    from bus_mileage m
    group by bus, date(mileage_date)
) m
    on f.bus = m.bus and f.bus_date = m.bus_date

I переименовал столбцы date, чтобы было более очевидно, какие они есть - и я предположил, что они на самом деле имеют тип данных datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...