我正在学习 postgres 初学者在线类(class),下面是问题和示例答案。但我想知道是否可以使用 MAX 而不是 ORDER BY DESC?
问题:
哪个客户的最高客户 ID 号名称以“E”开头且地址 ID 低于 500?
建议的答案是:
SELECT first_name,last_name FROM customer
WHERE first_name LIKE 'E%'
AND address_id < 500
ORDER BY customer_id DESC LIMIT 1
我尝试了下面的代码,但它什么也没返回。我还错过了什么吗?我对其他类似的查询尝试了相同的概念,并且它有效。我只是不明白为什么这个不起作用。应该有一行受到影响。
SELECT first_name, last_name, customer_id FROM customer
WHERE first_name LIKE 'E%'
AND address_id < 500
AND customer_id = (SELECT MAX(customer_id) FROM customer)
提前致谢! 编辑1:我在尝试中写了MIN。应该是MAX吧,反正我改了,还是什么都没有。
编辑2:下面我添加了“类似查询”的详细信息。
下面的代码有效,它基本上返回所有评级为 R 或 NC-17、长度超过 55、租金最便宜(最低)的电影。
SELECT title, length, rating, rental_rate FROM film
WHERE rating IN('R','NC-17')
AND length <=55
AND rental_rate = (SELECT MIN(rental_rate) FROM film)
编辑3: 所以我想,我上面的代码可以工作,所以它应该可以解决查找 MAX customer_id 的新查询。 这应该很简单。我真的很想知道为什么我的 MAX 代码不起作用。请帮助我。
假设有 3 行数据需要分析,见下文。
CREATE TABLE customer (
first_name VARCHAR(50),
last_name VARCHAR(50),
address_id INT,
customer_id INT
)
INSERT INTO customer (first_name, last_name,address_id,customer_id )
VALUES
(Eddie, Longbottom, 501, 100),
(Freddie, Longbottom, 501, 101),
(Ellie, Longbottom, 502,99);
应该返回答案
Eddie Longbottom 501 100.
但我只是想使用 MAX 而不是 ORDER BY customer_id DESC。
请帮忙..! TYSM
最佳答案
这显然行不通(除非您展示,否则我们不知道什么是“相似”查询)。
想象只有两行
您的主查询仅匹配 ID 5,您的子查询仅匹配 ID 3。
第 3 行和第 5 行不相同 = 没有行符合条件。您无法将过滤条件拆分到两个不相关的查询中。
你需要
select first_name, last_name, customer_id
from customer
where customer_id = (
select min(customer_id)
from customer
where address_id < 500 and first_name like 'E%'
);
但是,您得到的答案是更好的解决方案。
关于sql - Postgresql - WHERE 中的 MAX 标准 - 初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77072176/