Mysql 如何嵌套两个count()语句?

Mysql 如何嵌套两个count()语句?,mysql,Mysql,想象一个三列的表格,比如说旅行,其中包含列姓名,以及他们去过的国家,以及日期,这样就可以有重复的姓名+国家行 -->我不想显示实际的名称值,也不想显示实际的国家值-只显示它们的计数,并且只显示访问过一个以上国家的值 它将是这样一个列表: |9 | 2 |表示有9人访问了2个国家, |4 | 3 |表示有4人访问了3个国家, |2 | 4 |表示2人访问了4个国家, 等等 我对SQL很在行,但我想我需要构建某种嵌套查询: select count(t1.NAME) from TRAVELS t1

想象一个三列的表格,比如说
旅行
,其中包含列
姓名
,以及他们去过的
国家
,以及
日期
,这样就可以有重复的姓名+国家行

-->我不想显示实际的
名称
值,也不想显示实际的
国家
值-只显示它们的计数,并且只显示访问过一个以上国家的值

它将是这样一个列表:

|9 | 2 |表示有9人访问了2个国家,
|4 | 3 |表示有4人访问了3个国家,
|2 | 4 |表示2人访问了4个国家,
等等

我对SQL很在行,但我想我需要构建某种嵌套查询:

select count(t1.NAME)
from TRAVELS t1
where (
  select count(distinct COUNTRY) 
  from TRAVELS t2
  where t1.name = t2.name
    and count(t2.COUNTRY) > 1
)
显然,这不起作用,但我希望这能显示我的总体意图。我还没有找到关于这种嵌套双重计数的任何信息,尽管我一看到它可能就足够简单了

select country_count, count(*) as people_count 
  from (select name, count(distinct country) as country_count 
          from travels 
         group by name 
        having count(distinct country) > 1)
group by country_count
当然,这假定名称是唯一的。如果不是,您可能希望使用用户id代替名称

当然,这假定名称是唯一的。如果没有,您可能希望使用用户id来代替名称。

在此处尝试:

查询:

select
    count(*) as people,
    countries_visited
from (
    select
      name,
      count(distinct country) as countries_visited
    from travels
    group by name
    having count(distinct country) > 1
) s
group by countries_visited
order by people desc, countries_visited desc
请在此处尝试:

查询:

select
    count(*) as people,
    countries_visited
from (
    select
      name,
      count(distinct country) as countries_visited
    from travels
    group by name
    having count(distinct country) > 1
) s
group by countries_visited
order by people desc, countries_visited desc

@TorbenGundtofteBruun,我的解决方案对你有用吗?如果是,那么你能接受答案吗?给我一个睡觉的机会,读你的答案,尝试一下,然后回答:-)是的,它有效。与接受的答案相比,结果中的列被交换。这些列的顺序与问题中的示例中的顺序相同:),但不是这样matter@TorbenGundtofteBruun,我的解决方案对你有用吗?如果是,那么你能接受答案吗?给我一个睡觉的机会,读你的答案,尝试一下,然后回答:-)是的,它有效。与接受的答案相比,结果中的列被交换。这些列的顺序与您问题中的示例中的顺序相同:),但这并不重要。我更喜欢此解决方案,因为它更易于阅读。我只需要添加“my_table”就可以让MySQL接受这个查询。我更喜欢这个解决方案,因为它更容易阅读。我只需要添加“my_table”就可以让MySQL接受查询。