我有以下架构:
Configurations 1. configname 2. configvalue 3. otherDataInstanceId OtherData 1. dataname 2. datavalue 3. instanceId
配置的otherDataInstanceId
链接到OtherData的instanceId
列。我针对MySQL中的数据执行了以下查询:
SELECT other.datavalue AS time_stamp,
configs.configname AS configuration_name,
configs.configvalue AS configuration_value
FROM Configurations configs
JOIN OtherData other
WHERE configs.otherDataInstanceId=other.instanceId
AND other.dataname='timestamp'
GROUP BY configuration_name;
我希望看到这些结果:
2012-01-02 16:05:48 Voltage 10 volts
2000-01-01 12:00:09 Voltage 8 volts
2013-06-01 01:12:32 Voltage 28 volts
2013-07-01 01:12:32 Voltage 5 volts
相反,我只看到:
2012-01-02 16:05:48 Voltage 10 volts
我一直在线搜索,GROUP BY
应该按指定的列获取结果和分组行;所以在我的数据库中,如果我消除GROUP BY,我会看到多个configname
具有相同的值('Voltage'
)。所以它应该将它们彼此相邻。但我只看到'Voltage'
的一行,而不是4 - 为什么?
答案 0 :(得分:6)
GROUP BY configuration_name
表示“我希望configuration_name
的每个不同值都有一行”。这意味着您只能使用configuration_name
'Voltage'
获得一行。
在你的问题结束时,你提到要“将它们彼此分组” - 这不是“组”在SQL上下文中的意思,而是关于你获得结果的“顺序”。所以你不想GROUP BY configuration_name
而是ORDER BY configuration_name
。
实际上,您可能希望将所有电压彼此相邻,但随后在这些组中,根据时间戳对行进行排序。为此,您只需按顺序指定多个列,例如, ORDER BY configuration_name, time_stamp
,其翻译为“按configuration_name
对结果进行排序,然后按time_stamp
”对其进行排序。