SQL Server MAX和GROUP BY不能很好地一起播放

时间:2015-06-03 20:33:24

标签: sql-server tsql group-by max aggregate-functions

我有一个表格的T-SQL查询:

4.0.0.rc

当我运行此查询时,我得到以下结果:

SELECT          f.fizz_name, b.buzz_version, fu.foo_name
FROM            fizz f
INNER JOIN      buzz b
ON              f.fizz_id = b.fizz_id
INNER JOIN      foo fu
ON              b.buzz_id = fu.buzz_id
WHERE           f.bar LIKE 'YES'

这个问题是它包含了许多我不关心的条目。实际上,我只关心每个fizz_name buzz_version foo_name ==================================== Gamma 0.3.960 Test Gamma 0.3.961 Test Gamma 0.3.960 Test Gamma 0.3.961 Test Delta 0.3.2588 Test Delta 0.3.2589 Test Delta 0.3.2588 Test Delta 0.3.2589 Test Echo 2.2.38 Test Echo 2.2.38 Test 实例的最大buzz_version,换句话说:

fizz

...因为“ 2.2.38 ”是fizz_name buzz_version foo_name ==================================== Gamma 0.3.961 Test Delta 0.3.2589 Test Echo 2.2.38 Test 的最新/词典编辑最高buzz_version,其他投注相同。

所以我尝试与Echo一起使用GROUP BY来获取这些值,如下所示:

MAX

但这给了我一个错误:

  

列'fizz.fizz_name'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我哪里出错,为什么?

2 个答案:

答案 0 :(得分:1)

每个fizz_name需要一个结果行,因此必须按fizz_name分组。你用它显示MAX(b.buzz_version)并且必须决定显示哪个fu.foo_name。 E.g:

SELECT f.fizz_name, MAX(b.buzz_version), MAX(fu.foo_name)
FROM fizz f
INNER JOIN buzz b ON f.fizz_id = b.fizz_id
INNER JOIN foo fu ON b.buzz_id = fu.buzz_id
WHERE f.bar LIKE 'YES'
GROUP BY f.fizz_name;

答案 1 :(得分:1)

您正在查询中按聚合分组。您需要使用标量列进行分组。在这种情况下,按f.fizz_name,fu.foo_name

分组