首页 > 解决方案 > 选择计数数高于平均计数数的每个计数行

问题描述

SELECT id_film, sq1.counter 
FROM(
    SELECT id_film, COUNT(*) as counter 
    FROM film_vorstellung 
    GROUP BY id_film
) as sq1 WHERE sq1.id_film = id_film

查询返回:

id_film 柜台
3 1
5 1
4 1
6 2
2 3
1 1

到目前为止,一切都很好。

现在我想得到每一个计数器高于平均计数器值的 id_film .. 我正在尝试这样做几个小时。最常见的语法错误是我无法使用我尝试的平均方法...

标签: sqlpostgresql

解决方案


您可以使用 CTE 和标量查询表达式来执行此操作。几乎用简单的语言,首先计算计数器值id_film,然后“获取计数器高于平均计数器值的每个 id_film”。

with cntrs as -- your subquery
(
 SELECT id_film, COUNT(*) as cntr 
 FROM film_vorstellung 
 GROUP BY id_film
)
select id_film, cntr 
from cntrs
where cntr > (select avg(cntr) from cntrs);

推荐阅读