0

想象一个三列的表,假设列有它们曾经去过TRAVELS的列NAME,这样就可以有重复的 NAME+COUNTRY 行。COUNTRYDATE

--> 我不想显示实际NAME值,也不想显示实际COUNTRY值 - 只是它们的计数,仅适用于那些访问过 1 个以上国家的人。

这将是一个这样的列表:

| 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
)

显然这不起作用,但我希望它表明我的总体意图。我还没有找到关于这种嵌套重复计数的任何信息,尽管一旦我看到它可能就足够简单了?

4

2 回答 2

2

在这里试试:http ://sqlfiddle.com/#!2/b0762/3

查询:

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
于 2012-06-06T22:46:45.387 回答
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

当然,这假设名称是唯一的。如果不是,您可能希望使用 user_id 代替名称。

于 2012-06-06T22:45:04.010 回答