我想显示在DVD商店多次租用的电影片名列表。 “租借”和“电影”表格没有连接,但您可以在此处看到:http://www.postgresqltutorial.com/wp-content/uploads/2013/05/PostgreSQL-Sample-Database.png
这是我到目前为止所提出的错误'rentCount不存在'
SELECT title, COUNT(rental_id) AS rentCount
FROM film f, rental r
WHERE rentCount >= 1
GROUP BY title
ORDER BY rentCount
答案 0 :(得分:2)
(不确定您正在使用哪种SQL,但在SQL或MySQL中,这应该可行)
您的film
到rental
表格中的链接似乎是通过您的inventory
表格。使用film
加入inventory
到film_id
,然后使用inventory
加入rental
到inventory_id
。
SELECT title, COUNT(rental_id) AS rentCount
FROM film f
INNER JOIN inventory i ON i.film_id = f.film_id
INNER JOIN rental r ON i.inventory_id = r.inventory_id
HAVING rentCount >= 1
GROUP BY title
ORDER BY rentCount
编辑:感谢Nick在评论中指出,我已将您的WHERE
更改为HAVING
,原因是您正在使用聚合功能栏(rentCount
)。
答案 1 :(得分:0)
你需要一个HAVING子句:
.children[0]
注意我没有引用别名" rentCount"在HAVING。
答案 2 :(得分:0)
SQL不允许在同一查询的过滤条件中使用列别名。如果要使用列名,则需要使用如下的子查询。
SELECT *
FROM
(SELECT title, COUNT(r.rental_id) AS rentCount
FROM film f
JOIN Inventory I on f.film_id=I.film_id
JOIN rental r on l.Inventory_id= r.Inventory_id
GROUP BY title)t
WHERE rentCount >= 1
ORDER BY rentCount
如果您正在使用agrgregate函数并且想在查询中创建过滤器,也可以使用HAVING子句。
SELECT *
FROM
(SELECT title, COUNT(r.rental_id) AS rentCount
FROM film f
JOIN Inventory I on f.film_id=I.film_id
JOIN rental r on l.inventory_id= r.inventory_id
GROUP BY title
Having Count(rental_id)>=1)t
ORDER BY rentCount
请记住,永远不要使用逗号来链接或建立表之间的关系。编写适当的连接并链接它们。在您的情况下,如果您使用INENER JOIN,则不需要文件管理器条件' where rentCount&gt ; = 1'因为条件总是会返回一个真值。我的意思是下面的查询会给你与其他查询相同的结果。
SELECT title, COUNT(r.rental_id) AS rentCount
FROM film f
JOIN Inventory I on f.film_id=I.film_id
JOIN rental r on l.inventory_id= r.inventory_id
GROUP BY title