postgree group by order by query

问题描述

我有数据库

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