Подведение итогов Mysql Table с использованием подзапроса - PullRequest
0 голосов
/ 28 января 2019

У меня есть простая таблица mysql, которую я хочу обобщить.Вот моя таблица

Имя таблицы: hauling_trip

Столбцы:

ID, CONTRACTOR, HAULING_SHEET_NO, FROM_LOCATION, TO_LOCATION, LOAD_WEIGHT_KG, PASS_NO

Данные:

1   PM  A00001  Stumping A  Pangkalan   940.00  112233
2   PM  A00002  Stumping B  Pangkalan   530.00  112233
3   PM  A00003  Stumping B  Pangkalan   970.00  112244
4   PM  A00004  Stumping A  Pangkalan   450.00  112244
5   TKF A00005  Stumping A  Pangkalan   850.00  112255
6   TKF A00006  Stumping B  Pangkalan   780.00  112255
7   TKF A00007  Stumping A  Pangkalan   903.00  112266

Что я хочу сделать, этоЯ хочу суммировать эту таблицу, показывая общее количество отключений и вес нагрузки (кг) каждого PASS_NO.Вот желаемый результат

PASS_NO CONTRACTOR  WEIGHT_A    TRIP_A  WEIGHT_B    TRIP_B
112233  PM          940.00      1       530.00      0
112244  PM          450.00      0       970.00      1
112255  TKF         850.00      1       780.00      0
112266  TKF         903.00      1       0.00        0

Идентичный PASS_NO означает, что выборочные листы принимаются за 1 поездку.Например, лист выборки A00001 и A00002 имеют одинаковое значение PASS_NO, равное 112233. Таким образом, оба листа выборки принадлежат 1 поездке, и эта поездка принадлежит FROM_LOCATION Stumping A, потому что вес больше, чем Stumping B.

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

SELECT
    a.PASS_NO,
    a.CONTRACTOR,
    ( SELECT sum( LOAD_WEIGHT_KG ) FROM hauling_trip WHERE PASS_NO = a.PASS_NO AND FROM_LOCATION = 'Stumping A' ) AS WEIGTH_A,
    ( SELECT count( PASS_NO ) FROM hauling_trip WHERE PASS_NO = a.PASS_NO AND FROM_LOCATION = 'Stumping A' ) AS TRIP_A,
    ( SELECT sum( LOAD_WEIGHT_KG ) FROM hauling_trip WHERE PASS_NO = a.PASS_NO AND FROM_LOCATION = 'Stumping B' ) AS WEIGHT_B,
    ( SELECT count( PASS_NO ) FROM hauling_trip WHERE PASS_NO = a.PASS_NO AND FROM_LOCATION = 'Stumping B' ) AS TRIP_B, 
    SUM(a.LOAD_WEIGHT_KG) AS TOTAL_WEIGHT
FROM
    hauling_trip AS a 
GROUP BY
    a.PASS_NO, a.CONTRACTOR

1 Ответ

0 голосов
/ 28 января 2019

Использовать условную агрегацию:

SELECT ht.PASS_NO, ht.CONTRACTOR,
       sum(case when ht.from_location = 'Stumping A' then ht.load_weight_kg end) as weight_a,
       sum(ht.from_location = 'Stumping A') as trip_a,
       sum(case when ht.from_location = 'Stumping B' then ht.load_weight_kg end) as weight_b,
       sum(ht.from_location = 'Stumping B') as trip_b
       sum(ht.LOAD_WEIGHT_KG) AS TOTAL_WEIGHT
FROM hauling_trip ht
GROUP BY ht.PASS_NO, ht.CONTRACTOR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...