我正在学习初级 postgres 在线课程,下面是问题和示例答案。但我想知道是否可以使用 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 MIN(customer_id) FROM customer)
提前致谢!
这显然行不通。
想象只有两行
客户 ID | 姓名 |
---|---|
3 | 多丽丝 |
5 | 伊迪丝 |
您的主查询仅匹配 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%'
);
然而你得到的答案已经是最好的解决方案了。