我有一张桌子,需要返回不同的数据及其数量。我在2个不同的栏目上这样做,但从那以后就没有遇到任何运气。这是我想要做的一个例子。
╔════════╦════════════╦══════╦═════════════╗
║ Fog ║ Count(fog) ║ Snow ║ Count(snow) ║
╠════════╬════════════╬══════╬═════════════╣
║ LA01 ║ 1123 ║ NWC ║ 109 ║
║ SIU ║ 3665 ║ SIS ║ 64 ║
║ CHARTN ║ 444 ║ PHS ║ 120 ║
╚════════╩════════════╩══════╩═════════════╝
我尝试过此查询但确实有效
SELECT fog, count(fog), snow, count(snow) FROM message
WHERE arrival_timestamp >= (now() - '48 hour'::INTERVAL) GROUP BY fog, snow
当我尝试这个时,我对2个不正确的计数有相同的值。
答案 0 :(得分:0)
您想要做的事情需要一些工作,因为每行的内容是独立的。在Postgres中,您可以使用full outer join
和row_number()
:
select f.fog, f.cnt, s.snow, s.cnt
from (select fog, count(*) as cnt,
row_number() over (order by count(*) desc) as seqnum
from message
where arrival_timestamp >= (now() - '48 hour'::INTERVAL)
group by fog
) f full outer join
(select snow, count(*) as cnt,
row_number() over (order by count(*) desc) as seqnum
from message
where arrival_timestamp >= (now() - '48 hour'::INTERVAL)
group by snow
) s
on f.seqnum = s.seqnum;
这是按照最高计数排序的 - 在样本结果中不是这种情况。