如何在 Postgresql 中获取不同的值?

Posted

技术标签:

【中文标题】如何在 Postgresql 中获取不同的值?【英文标题】:How to get Distinct Value in Postgresql? 【发布时间】:2021-03-28 04:57:19 【问题描述】:

我有一张桌子approval,如下所示..

m_requisition_id    ad_wf_activity_id    bpname            designation
-------------------------------------------------------------------------
1014546             1014546              Abul Kalam Azad   Asst. Manager
1014546             1225097              Md. Hasan Zahir   Plant Manager
1014546             1229239              Md. Hasan Zahir   Plant Manager
1014546             1229240              Sayela Alam       Sr. Manager
1014546             1229241              Md. Hasan Zahir   Plant Manager
1014546             1229242              Sayela Alam       Sr. Manager

现在我需要基于ad_wf_activity_id 列的最大数量的bpname 列的不同值,如下所示。

m_requisition_id    ad_wf_activity_id    bpname            designation
-------------------------------------------------------------------------
1014546             1014546              Abul Kalam Azad   Asst. Manager
1014546             1229241              Md. Hasan Zahir   Plant Manager
1014546             1229242              Sayela Alam       Sr. Manager

【问题讨论】:

【参考方案1】:

您可以使用 ma​​x() 函数代替 distinct 如下所示

select m_requisition_id, max(ad_wf_activity_id), bpname, designation
from approval
GROUP BY m_requisition_id, bpname, designation

让我们在这里尝试- https://dbfiddle.uk/?rdbms=postgres_12&fiddle=73f15e1ed96f1308a5984a91b1df91e2

【讨论】:

【参考方案2】:

那就是DISTINCT ON:

SELECT DISTINCT ON (m_requisition_id, bpname, designation)
       m_requisition_id, bpname, designation
FROM atable
ORDER BY m_requisition_id, bpname, designation, ad_wf_activity_id DESC;

你的数据模型没有规范化,你很容易出现拼写略有不同引起的问题。

【讨论】:

以上是关于如何在 Postgresql 中获取不同的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PostgreSQL 中的 JSONB 数组中获取特定对象的值?

PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?

如何使用 postgresql 按多列中表示的值进行聚合

如何设置具有两列的组合框的值?

如何从表中获取字段列表和不同值

如何在 postgresql 中获取正在运行的查询的执行计划?