在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
;