PostgreSQL 分组

标签 postgresql group-by grouping

我想根据多列中的值对值进行分组。 这是一个例子: enter image description here

我想得到输出:

{{-30,-50,20},{-20,30,60},{-30,NULL or other value, 20}}

我设法到达:

SELECT array_agg("val") 
FROM my_table 
WHERE "t_id" = 1  
GROUP BY "m_id";

{{-30,-50,20},{-20,30,60},{-30,20}}

什么是最好的方法?

最佳答案

create table my_table (
    t_id int,
    m_id int,
    s_id int,
    val int
);
insert into my_table (t_id, m_id, s_id, val) values
(1,1,1,-30),
(1,1,2,-50),
(1,1,3,20),
(1,2,1,-20),
(1,2,2,30),
(1,2,3,60),
(1,3,1,-30),
(1,3,3,20);

select array_agg(val order by s_id) 
from
    my_table t
    right join
    (
        (
            select distinct t_id, m_id
            from my_table
        ) a
        cross join
        (
            select distinct s_id
            from my_table
        ) b
    ) s using (t_id, m_id, s_id)
where t_id = 1  
group by m_id
order by m_id
;
   array_agg   
---------------
 {-30,-50,20}
 {-20,30,60}
 {-30,NULL,20}

关于PostgreSQL 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22148225/

相关文章:

database - 是否有比较 T-SQL 和 PL/SQL 的良好引用卡?

ruby-on-rails - rails 迁移生成随机表。这是从哪里来的?

PHP 使用 LEFT JOIN 时如何按结果数组进行分组

java-8 - java8流分组和聚合总和排序

javascript - 使用 postgresql 从 url 加载图像,但只填充文本链接

postgresql - 如何在 Haskell 中推广 Opaleye 查询(使用 Vinyl)?

sql-server - SSRS。如何在 table1_Details_Group 的右侧创建新的行组?

c# - .NET 中的数字分组

mysql - 检索每组中的最后一条记录 - MySQL

python - Pandas - 从每组的最大日期中减去最小日期