我有一张表格,描述每个托盘中有多少FISH,VEG或OR肉。
tray | qty | type
-------+-----+-------
1 | 5 | FISH
2 | 6 | VEG
2 | 2 | FISH
2 | 5 | MEAT
3 | 8 | VEG
3 | 3 | FISH
3 | 9 | MEAT
4 | 10 | MEAT
让我们调用这个表R(它是我在查询中创建的子表)。
我想要的是一张表格,其中显示哪个托盘的每种类型的数量最多,如下所示:
type | tray
-------+------
FISH | 1
VEG | 3
MEAT | 4
我尝试编写以下查询
SELECT type AS type1, tray
FROM (SELECT ... bla bla) AS R
WHERE R.qty IN (SELECT MAX(qty) FROM R WHERE type = type1);
错误是R不存在,我该如何解决?
答案 0 :(得分:0)
我会使用窗口函数来解决这个问题:
select r.type, r.tray
from (select r.*,
row_number() over (partition by type order by qty desc) as seqnum
from r
) r
where seqnum = 1;
答案 1 :(得分:0)
SELECT otr.tray, otr._type, _qty
FROM
Your_Table otr
JOIN (
SELECT _type, MAX(qty) _qty
FROM Your_Table
GROUP BY _type
) A ON A._type = otr._type AND _qty = qty
答案 2 :(得分:0)
SELECT DISTINCT ON(expression [,...])仅保留给定表达式求值的每组行的第一行。使用与ORDER BY相同的规则解释DISTINCT ON表达式(参见上文)。注意"第一行"除非使用ORDER BY来确保首先出现所需的行,否则每个集合都是不可预测的。
select distinct on (tray, type) *
from r
order by tray, type, qty desc
如果不允许distinct on
,因为它只是Postgresql,那么进行自我加入:
select tray, type, qty
from
r
join (
select type, max(qty) as qty
from r
group by type
) s using (type, qty)