postgresql SELECT/COUNT语句可以单独工作,但不能在表的上下文中工作

mrwjdhj3  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我是一名学生,使用sakila dvd租赁数据库做一个项目,使用PostgreSQL 15.2和pgAdmin4。经过一些其他工作,我有以下代码填充一个表,该表将比较类别之间的租赁持续时间和频率:

INSERT INTO summary (store_id, cat_group, total_rentals, total_titles, avg_rental_duration) 
    SELECT DISTINCT detailed.store_id, cat_group_fx(detailed.category_name), 
        (SELECT COUNT (detailed.rental_id)
             FROM detailed, summary AS selfsum
            WHERE selfsum.store_id = detailed.store_id
             AND cat_group_fx(detailed.category_name) = selfsum.cat_group
            GROUP BY detailed.store_id, selfsum.cat_group),  
        (SELECT COUNT (inventory.inventory_id)
             FROM inventory, detailed, summary AS selfsum
            WHERE inventory.film_id = detailed.film_id
             AND inventory.store_id = detailed.store_id
            AND detailed.store_id = selfsum.store_id
             AND cat_group_fx(detailed.category_name) = selfsum.cat_group
            GROUP BY detailed.store_id, selfsum.cat_group), 
        AVG(rental.return_date - rental.rental_date) 
    FROM detailed, rental 
    GROUP BY detailed.store_id, detailed.category_name;

当我运行整个代码(大约60行)时,我得到的汇总表中的total_rentals和total_titles的整列都是[null]。example
但是当我突出显示并单独运行每个SELECT COUNT语句时,它奇迹般地计数,并且计数显示正确,如下图所示。
为什么会发生这种情况&我怎样才能把计数值放到主表中?
更多信息编辑:cat_group_fx是一个用户函数,它将租赁按流派分类,使用IN进行比较,使用CASE进行排序。“detailed”是另一个表,它位于代码的更上方,只是从各个Sakila表中收集数据,包括rental_id,film_id,store_id,category.name,rental_date和return_date。表是收集和协调相关的粒度数据,然后使用聚合和用户函数将其转换为此处显示的“摘要”表。它是作业的一部分。

chhqkbe1

chhqkbe11#

select语句中的每一列都需要在结果集中的每一行返回一个值。如果该列是计算的,那么该计算需要返回一个值。
如果计算涉及另一个select语句(而不是简单的加法),那么它就是子查询。
如果子查询被链接回主查询,则子查询是“相关的”,例如

SELECT T1.ROW_ID, T1.NAME
,(SELECT COUNT(1) 
  FROM TABLE2 T2 
  WHERE T2.PARENT_ID = T1.ROW_ID
) COUNT_T2
FROM TABLE1 T1

使用WHERE T2.PARENT_ID = T1.ROW_ID将子查询关联回主查询。因此,对于T1中的每一行,都会计算T2中匹配记录的计数。
你可以有不相关的子查询,例如

SELECT T1.ROW_ID, T1.NAME
,(SELECT COUNT(1) 
  FROM TABLE2 T2 
) COUNT_T2
FROM TABLE1 T1

在这种情况下,结果集中的每条记录在COUNT_T2中将具有相同的值

相关问题