我有一个表格的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子句中。
我哪里出错,为什么?
答案 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
分组