问题描述
kode wilayah area
001 | Wilayah 1 | Area Padang
002 | Wilayah 2 | Area Bandung
006 | Wilayah 3 | Area Bandung
008 | Wilayah 4 | Area Bogor
004 | Wilayah 5 | Area Jakarta
在上表中,有一个区域是“万隆”,但代码不同。如何进行分组 区域,并在分组时显示代码为 006 的区域“万隆”
我是这样做的,但是 postgree 错误
SELECT * FROM tbl_area
GROUP BY area
ORDER BY kode DESC
如何做出这样的结果
kode wilayah area
001 | Wilayah 1 | Area Padang
006 | Wilayah 3 | Area Bandung
008 | Wilayah 4 | Area Bogor
004 | Wilayah 5 | Area Jakarta
解决方法
我会在这里使用条件聚合来生成您想要的列值:
SELECT
MAX(CASE WHEN area = 'Area Bandung' AND kode = '006' OR
area <> 'Area Bandung'
THEN kode END) AS kode,MAX(CASE WHEN area = 'Area Bandung' AND kode = '006' OR
area <> 'Area Bandung'
THEN wilayah END) AS wilayah,area
FROM tbl_area
GROUP BY
area;
Demo
,我觉得应该是 "列 "tbl_area.kode" 必须出现在 GROUP BY 子句中或用于聚合函数中 " 或 tbl_area.wilayah 错误
在这种情况下,您可以尝试这三个字段的唯一组合,因为您希望每个唯一的“kcode”都有一行,因此数据库会产生歧义以提供哪个值。
SELECT distinct on(tbl_area.kode) tbl_area.kode,tbl_area.area,tbl_area.wilayah FROM tbl_area GROUP BY tbl_area.area,tbl_area.wilayah,tbl_area.kode ORDER BY tbl_area.kode ASC ;
但根据您的要求,我正在添加代码: 您可以添加订单。 这里使用的是 DISTINCT 而不是 group by。
SELECT kode,Wilayah,area FROM (
SELECT
DISTINCT ON (area) area,kode
FROM
tbl_area) t
ORDER BY kode ASC ;
kode wilayah area
1 Wilayah I Area Sumatra
2 Wilayah II Area Jawa dan Kalimantan
4 Wilayah V Area Sulawesi,Maluku & Papua
8 Wilayah IV Area Bali,Nusra & Luar Negeri