【发布时间】:2014-10-24 07:23:04
【问题描述】:
我有以下关系Invoice:
Invoice
-------------------------------------
| Id | Country | Total | CustomerId |
-------------------------------------
| 1 | USA | 22.32 | 3 |
-------------------------------------
| 2 | Belgium | 12.18 | 4 |
-------------------------------------
| 3 | USA | 27.76 | 2 |
-------------------------------------
| 4 | France | 24.52 | 5 |
-------------------------------------
| 5 | USA | 14.29 | 3 |
-------------------------------------
我必须查询发票的属性Id 和Total,其中Total 和Country USA 的值最高。如果来自美国的多张发票具有相同的最大值,则必须在结果集中返回所有发票。
我目前的情况如下:
SELECT
i."Id",
i."Total"
FROM
public."Invoice" i
WHERE
i."Total" = (SELECT MAX(t."Total")
FROM public."Invoice" t
WHERE t."Country" = 'USA');
这是正确的做法吗?我不确定,因为如果i.Id = t.Id,我不检查子查询。如果我这样做,我会在结果中得到不止一行。如何确保子查询返回的值确实属于i?
【问题讨论】:
标签: sql postgresql greatest-n-per-group