在MySQL中使用COUNT和WHERE
有点麻烦。我需要找到所有有共同语言的国家。我只需要列出语言不止一次出现的国家。这个代码有点问题在MySQL中使用COUNT和WHERE,mysql,count,where-clause,Mysql,Count,Where Clause,有点麻烦。我需要找到所有有共同语言的国家。我只需要列出语言不止一次出现的国家。这个代码有点问题 -- group countries by a common language SELECT country, language FROM countryinfo HAVING COUNT(language) > 1 GROUP BY language 它在定位中。这应该行得通 -- group countries by a common language SELECT country, la
-- group countries by a common language
SELECT country, language
FROM countryinfo
HAVING COUNT(language) > 1
GROUP BY language
它在定位中。这应该行得通
-- group countries by a common language
SELECT country, language
FROM countryinfo
GROUP BY language
HAVING COUNT(language) > 1
如果按
语言
分组,则需要计算国家
SELECT country, language
FROM countryinfo
GROUP BY language
HAVING COUNT(country) > 1
如果您想要我认为您想要的,我认为最清晰的方法是使用子查询;或者:
SELECT country, language
FROM countryinfo
WHERE language IN
( SELECT language
FROM countryinfo
GROUP BY language
HAVING COUNT(1) > 1
)
;
或者这个:
SELECT country, language
FROM countryinfo ci1
WHERE EXISTS
( SELECT 1
FROM countryinfo ci2
WHERE ci2.language = ci1.language
AND ci2.country <> ci1.country
)
;
此外,由于您基本上是将表格缩减为每种
语言一行,因此您应该使用类似GROUP_CONCAT(country)
的方法将所有使用该语言的国家压缩为一个字符串澳大利亚、英国、美国
(例如)。谢谢,这很有帮助,但每种通用语言只列出一个国家,我试图列出所有共享一种语言的国家。谢谢,这很有帮助,但它只列出了每种语言的一个国家,我试图列出所有共享一种语言的国家。你能解释一下计数(1)吗?谢谢。COUNT
计算非空值,因此COUNT(1)
只是表示“全部计数”(因为1
本身就不为空)。它也经常被写成COUNT(*)
。好吧,第一个是有效的,除了我不能用那个语言分组外,我在where后面添加了groupby,就像以前一样,它们都没有给我我想要的,任何想法?@stytown:我希望这些查询可以在没有任何修改的情况下使用。如果他们没有给你想要的,那么问题是我误解了你想要的;除非你帮我理解,否则我帮不了你。为什么要按语言添加附加的组
?你不想每个国家都有一排吗?@stytown:我编辑了我的答案,给出了不同的可能性;这就是“数学咖啡”在他/她上面的评论中认为你想要的。
SELECT GROUP_CONCAT(country),
language
FROM countryinfo
GROUP BY language
HAVING COUNT(1) > 1
;