Sql 筛选并比较数组_agg值
我有下一个问题:Sql 筛选并比较数组_agg值,sql,postgresql,Sql,Postgresql,我有下一个问题: SELECT type, array_agg(DISTINCT food_name) as food, portion FROM stored_meal WHERE id = 23 AND event_timestamp >= '2020-09-01 19:49:38.634483' AND event_timestamp < '2020-09-07 19:49:38.634483' 我需要筛选出具有相同“食物项”和“最低部分”的行
SELECT
type,
array_agg(DISTINCT food_name) as food,
portion
FROM stored_meal
WHERE id = 23
AND event_timestamp >= '2020-09-01 19:49:38.634483'
AND event_timestamp < '2020-09-07 19:49:38.634483'
我需要筛选出具有相同“食物项”和“最低部分”的行
预期结果应为:
type food portion
launch {cola, wine, pizza} 4
breakfast {burger, pepsi} 5
我是SQL新手,有什么办法吗?您可以使用窗口函数:
SELECT type, food, portion
FROM (SELECT type, array_agg(DISTINCT food_name) as food, portion,
ROW_NUMBER() OVER (PARTITION BY array_agg(DISTINCT food_name) ORDER BY portion DESC) as seqnum
FROM stored_meal
WHERE id = 23 AND
event_timestamp >= '2020-09-01 19:49:38.634483' AND
event_timestamp < '2020-09-07 19:49:38.634483'
) sm
WHERE seqnum = 1;
查询没有使用GROUP BY,因此应该失败。这是您的实际代码吗?
SELECT type, food, portion
FROM (SELECT type, array_agg(DISTINCT food_name) as food, portion,
ROW_NUMBER() OVER (PARTITION BY array_agg(DISTINCT food_name) ORDER BY portion DESC) as seqnum
FROM stored_meal
WHERE id = 23 AND
event_timestamp >= '2020-09-01 19:49:38.634483' AND
event_timestamp < '2020-09-07 19:49:38.634483'
) sm
WHERE seqnum = 1;