为什么GROUP BY忽略了一些记录?

时间:2013-08-30 00:20:46

标签: mysql

我有以下架构:

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 - 为什么?

1 个答案:

答案 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”对其进行排序。