MySQL GROUP BY,并测试分组的项目

时间:2010-10-15 00:39:43

标签: sql mysql group-by

我有这样的查询:

select a, b, c, group_concat(d separator ', ')
from t
group by a;

这似乎工作得很好。据我了解(原谅我,我是一个MySQL菜鸟!),它返回的行:

  • 每个唯一a
  • 表示每个a值,一个bc
  • 对于每个a值,所有d值,连接成一个字符串

这就是我想要的,但我还要检查每个abc始终是相同的,对于a的所有行}值。

我的第一个想法是比较:

select count(*) from t group by a, b, c;

使用:

select count(*) from t group by a;

并确保它们是平等的。但我不相信自己这是正确的,我当然不确定没有更好的方法。是否有SQL / MySQL习惯用法?

谢谢!

1 个答案:

答案 0 :(得分:1)

依赖MySQL's Hidden Columns functionality is spelled out in the documentation

的问题
  

使用此功能时,每个组中的所有行应与GROUP BY部分中省略的列具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。

应用于您的示例,这意味着bc的值是任意的 - 不能依赖结果来始终返回相同的值,并且可能会看到行为会随着b / c可以返回的可能值的数量而增加。因此,与GROUP BY aGROUP BY a, b, c ...

进行比较没有太多价值