在分组后选择子查询

时间:2013-06-14 18:34:19

标签: mysql sql group-by subquery

我想显示数据类型的名称,这些数据类型在整个数据库中至少使用了10次,其中使用了它们所使用的不同表的数量,由后者排序。在修补时,我到了这一点:

select data_type, count(distinct table_name) "count"
from all_tab_cols
group by data_type
having count(*) >= 10
order by "count" desc;

带输出

VARCHAR2 1920
NUMBER   1435
...

这是错误的,因为包含了视图等,我在数据库中只有125个表。 但是,如果我尝试

select data_type, (select count(distinct t.table_name)
                   from all_tables t
                   where t.table_name in table_name) "count"
from all_tab_cols
group by data_type
having count(*) >= 10
order by "count" desc;

我得到了

LONG         125
SDO_GEOMETRY 125
... and so on

这也是错误的。显然,这是因为子查询,更具体的where子句。我以为table_name只包含当前组的表名?我的想法有什么问题吗?你会如何解决这个问题?

FWIW,这是家庭作业,所以一些粗略的指针就足够了。 我们正在使用互联网电影数据库的克隆。

1 个答案:

答案 0 :(得分:1)

我将all_tab_columns加入all_tables - 这将过滤掉非表信息:

select data_type, count(distinct table_name) "count"
from all_tab_cols
inner join all_tables using (owner, table_name)
group by data_type
having count(*) >= 10
order by "count" desc;

我在这里使用了“自然联接”(using ...),因为它更容易:)