我有一个如下所示的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在卡车上装载了1100次一些物料。但是卡车175也被挖掘机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号卡车被挖掘机345装载了100次,而挖掘机275被装载了34次。在总载荷中,您看到来自所有/任何挖掘机的卡车1上的所有载荷,为134。升相同。升/负荷是结果表中总升/总负荷的除数
答案 0 :(得分:0)
SQL查询始终使用列出的列生成结果表。如果您不知道要显示的列,则无法编写查询。
您的选择:
这里是#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;