Строки для столбцов в MySQL, не зная заранее строк - PullRequest
0 голосов
/ 21 мая 2019

У меня есть таблица MySQL, которая выглядит следующим образом:

 +---------+-------------+--------------+-------------+-------------+
| truckNo | excavatorId | times_loaded | litres      | litres/time |
+---------+-------------+--------------+-------------+-------------+
|  1      | 345         | 100          |          50 |         0.5 |
+---------+-------------+--------------+-------------+-------------+
|  1      | 275         | 34           |          50 |        1.47 |  
+---------+-------------+--------------+-------------+-------------+
|  2      | 275         | 100          |          50 |         0.5 |
+---------+-------------+--------------+-------------+-------------+

В этой таблице экскаватор загружается на любой грузовик один или несколько раз. Например, экскаватор 345 загружал некоторые материалы на грузовик 1 100 раз. Но Грузовик 1 также был загружен экскаватором 275 некоторых материалов 34 раза. Теперь я хочу сгруппировать результаты для каждого грузовика, поэтому в левом столбце я вижу отдельный грузовик и каждый новый экскаватор отображается в виде нового столбца, как в следующей таблице:

 +--------+---------------------------------+---------------+--------------+
 |  Truck |     Excavators    | Total_loads |  Total litres |  Litres/load |
 +--------+-----------+-------+-------------+---------------+--------------+
 |        |    345    |  275  |             |               |              |
 +--------+-----------+-------+-------------+---------------+--------------+
 |    1   |    100    |  34   |   134       |     1.95      |    0.01      |
 +--------+-----------+-------+-------------+---------------+--------------+
 |    2   |           |  50   |   50        |     50        |    1         |
 +--------+-----------+-------+-------------+---------------+--------------+

Проблема в том, что я никогда не знаю заранее, сколько экскаваторов будет в таблице, поэтому я знаю, сколько колонн сделать. Есть ли способ сделать это? Возможно ли это SQL?

РЕДАКТИРОВАТЬ: Каждый грузовик загружается один или несколько раз любым экскаватором. Таким образом, в таблице результатов, например, грузовик № 1 был загружен 100 раз экскаватором 345 и 34 раза экскаватором 275. В общей загрузке вы видите все нагрузки, которые были на грузовике 1, со всех / любого экскаватора, который составляет 134. То же для литров. Литры / нагрузка - это деление в таблице результатов Всего литров / Total_loads

1 Ответ

0 голосов
/ 21 мая 2019

SQL-запросы всегда генерируют таблицы результатов с указанными столбцами. Если вы не знаете столбцы, которые хотите показать, вы не можете написать запрос.

Ваши варианты:

  1. Выберите необработанные данные и создайте таблицу результатов из этих данных в вашем приложении или на веб-сайте.
  2. Сначала выберите экскаваторы. Затем используйте свой язык программирования, чтобы создать запрос специально для этих экскаваторов.
  3. Делать с одним столбцом, содержащим составные строки.

Вот # 3:

select
  truckno,
  group_concat('EX(', excavatorid, ')=', times_loaded order by excavatorid) as loads,
  sum(times_loaded) as total_loads,
  sum(litres) as total_litres,
  sum(litres) / sum(times_loaded) as litres_per_load
group by truckno
order by truckno;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...