SQL:按未连接的表分组

时间:2016-10-04 00:11:36

标签: sql

我想显示在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

3 个答案:

答案 0 :(得分:2)

(不确定您正在使用哪种SQL,但在SQL或MySQL中,这应该可行)

您的filmrental表格中的链接似乎是通过您的inventory表格。使用film加入inventoryfilm_id,然后使用inventory加入rentalinventory_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
相关问题