我有以下查询:
SELECT case
when tbl.id % 2 = 0 then 'mod-2'
when tbl.id % 3 = 0 then 'mod-3'
when tbl.id % 5 = 0 then 'mod-5'
else 'mod-x'
end as odds, tbl.id from some_xyz_table tbl;
如果表格为Id 5,6,7
,那么它将输出为(从pg-admin复制):
"mod-5";5
"mod-2";6
"mod-x";7
但是,在这里我可以看到6
可以被2
和3
整除。我的预期输出是:
"mod-5";5
"mod-2";6
"mod-3";6 <-- this
"mod-x";7
有没有办法修改此查询以获得此类输出?任何替代解决方案都适合我。
答案 0 :(得分:0)
您可以使用UNION查询执行此操作[编辑将其更改为使用UNION ALL]:
SELECT 'mod-5', id FROM tbl -- divisible by 5
WHERE id %5 = 0
UNION ALL
SELECT 'mod-2', id FROM tbl -- divisible by 2
WHERE id %2 = 0
UNION ALL
SELECT 'mod-3', id FROM tbl -- divisible by 3
WHERE id %3 = 0
UNION ALL
SELECT 'mod-x',id FROM tbl -- not divisible by 5,3 or 2
WHERE id %5 <> 0 AND id%2 <> 0 AND id % 3 <> 0