【发布时间】:2022-01-04 01:36:15
【问题描述】:
我想知道为什么这个查询没有给我(我)预期的结果。 我有一张这样的桌子,有很多行。每个城市都有一个独特的地名。每个城市都可以有不同语言的版本。
alternatenameId | geonameid | isoLanguage | alternateName | isPreferredName
1554355 5128581 en Big Apple
1614284 5128581 en New York City
9138713 5128581 en New York 1
这是查询(我以一个城市为例,但我会扩展到更多城市):
SELECT geonameid,
alternateName,
MAX(isPreferredName)
FROM alternatename_new
WHERE geonameid=5128581
AND isoLanguage = 'en'
GROUP BY geonameid
这是查询结果
geonameid | alternateName | isPreferredName
5128581 Big Apple 1
但我希望有这个
geonameid | alternateName | isPreferredName
5128581 New York 1
我做错了什么?
【问题讨论】:
-
不完整的 GROUP BY 将在
alternateName中产生不确定的值,或者如果启用了 ONLY_FULL_GROUP_BY 则会出现错误。 -
将
MAX()放在列名周围只会确定输出中该列的值。它不会神奇地为输出中的其他列选择相应的行。你希望SELECT id, Col1, MIN(Col2), MAX(Col2) FROM fubar GROUP BY id做什么?您需要的是选择您感兴趣的行的东西;通常是WHERE子句,有时使用连接、子查询等。 -
对于每个
geonameid,是否只有一行isPreferredValue是1? -
@MatBailie:是的
-
@luca 然后将
isPreferredName = 1添加到WHERE子句中,而不是希望使用GROUP BY和MAX()有一些神奇的副作用。
标签: mysql greatest-n-per-group