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接受查询。