【问题标题】:postgree group by order by querypostgre 按查询顺序分组
【发布时间】:2021-04-30 21:26:50
【问题描述】:

我有数据库

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

【问题讨论】:

  • 为什么Area Bandung需要显示006Wilayah 3?是什么原因? 002Wilayah 2Area Bandung 的 kode 和 wilayah 是否无效?
  • kode 是数字列,还是文本?

标签: php html postgresql-9.1


【解决方案1】:

我觉得应该是 "列 "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 , Wilayah ,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

【讨论】:

  • @HarryWardana 你的意思是,你想显示最后一个'kode'而不是第一个'kode'?
  • yaps ,我使用 postgree 和 kode (varchar)
  • 你试过我的查询了吗?并测试结果?您可以更改订单。
【解决方案2】:

我会在这里使用条件聚合来输出你想要的列值:

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

【讨论】:

  • 我想显示kode、area、wilayah、分组区域
  • 在问题中包含您想要的确切输出。
  • 谢谢,这个查询是正确的,但是当我在postgree上敲的时候,有一个错误提示,即找不到从未知到文本的转换函数
  • 你为什么用 MySQL 标记你的问题?请编辑您的示例数据并显示kode真实 值。 kode 是数字列吗?
  • 对不起,我用的是postgree
猜你喜欢
  • 2017-03-29
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多