返回客户名单和平均租金(Sakila)

时间:2014-03-15 14:34:24

标签: mysql database

所以我需要完成一个查询,但是我收到了这个错误。我没有和MySQL一起工作那么久,所以我确信这与我无法理解MySQL如何工作有关。

数据库http://dev.mysql.com/doc/sakila/en/
图表https://dev.mysql.com/doc/workbench/en/images/wb-sakila-eer.png

我主要与客户合作,租赁,付款。

我需要一份客户列表,其平均租金金额以及最近的租借/退货日期。

SELECT 
       DISTINCT customer.customer_id, customer.last_name, customer.first_name,
       customer.email, AVG(payment.amount) 'Average Rental', 
       max(rental.rental_date) 'Most Recent Rental Date',
       max(rental.return_date) 'Most Recent Return Date'
FROM   customer
 INNER JOIN rental 
    ON rental.rental_id = payment.rental_id 
   AND customer.customer_id = rental.customer_id
 INNER JOIN payment 
    ON payment.rental_id = rental.rental_id 
   AND payment.customer_id = customer.customer_id
GROUP BY customer_id
ORDER BY customer.last_name;

错误:

Error Code: 1054. Unknown column 'payment.rental_id' in 'on clause'

即使列存在,有人可以解释为什么会出现此错误吗? 另外,我如何解决这种情况。

1 个答案:

答案 0 :(得分:0)

您的加入条件顺序错误。在将on条款中的表格包含在from中之前,您无法引用它。事实上,你重复了两次相同的条件。试试这个:

SELECT customer.customer_id, customer.last_name, customer.first_name,
       customer.email, AVG(payment.amount) "Average Rental",
       max(rental.rental_date) as "Most Recent Rental Date", 
       max(rental.return_date) as "Most Recent Return Date"
FROM customer INNER JOIN
     rental
     ON customer.customer_id = rental.customer_id INNER JOIN
     payment
     ON payment.rental_id = rental.rental_id AND
        payment.customer_id = customer.customer_id
GROUP BY customer.customer_id
ORDER BY customer.last_name;

请注意,我还将单引号更改为列标识符的双引号。不要使用单引号作为标识符;这通常会导致混乱。使用双引号或反引号。

并且,我删除了distinct关键字。使用group by时通常不需要。

我将表名添加到group by。否则,您将收到不明确的列错误。