You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅允许使用一次SELECT的PostgreSQL查询问题求解

解决方案

正确的PostgreSQL查询如下:

SELECT 
    c.customer_id,
    c.first_name || ' ' || c.last_name AS full_name,
    COUNT(r.rental_id) AS total_rentals
FROM customer c
INNER JOIN rental r ON c.customer_id = r.customer_id
INNER JOIN inventory i ON r.inventory_id = i.inventory_id
INNER JOIN film f ON i.film_id = f.film_id
GROUP BY c.customer_id, c.first_name, c.last_name
HAVING COUNT(CASE WHEN f.rating = 'NC-17' THEN 1 END) = 0
ORDER BY total_rentals DESC, c.last_name
LIMIT 5;

关键修正说明:

  • 替换过滤逻辑:原查询用WHERE film.rating != 'NC-17'仅剔除了单条NC-17租赁记录,但有其他非NC-17租赁的客户仍会被统计。新的HAVING条件会检查分组后的客户是否存在任何NC-17租赁——统计结果为0时,说明该客户从未租过NC-17电影,完全符合题目排除要求。
  • 调整JOIN类型:原查询的RIGHT JOIN会引入无对应库存的无效电影记录,全INNER JOIN确保只关联有实际租赁行为的客户、租赁记录、库存和电影数据。
  • 简化分组字段:直接按customer_id、first_name、last_name分组,比拼接后的full_name更清晰,也符合PostgreSQL的分组规则。

内容的提问来源于stack exchange,提问作者Hector Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:12:11