【问题标题】:Returning a List of Customers and Average Rental Amounts (Sakila)返回客户列表和平均租金金额 (Sakila)
【发布时间】:2023-03-26 06:05:01
【问题描述】:

所以我需要完成一个查询,但我收到了这个错误。我已经很久没有使用 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'

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

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您的加入条件顺序错误。在将表包含在from 中之前,您不能在on 子句中引用该表。事实上,你已经重复了两次相同的条件。试试这个:

    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。否则,你会得到一个模棱两可的列错误。

    【讨论】:

    • 我明白了。我想这有点像在编程中实际声明变量之前使用它。感谢您的回答和额外的信息,它确实有助于理解约定!
    猜你喜欢
    • 2019-07-22
    • 1970-01-01
    • 2016-12-05
    • 2012-06-30
    • 2015-01-13
    • 2022-06-13
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多