Postgresql GROUB BY combination



嗨,如果我有组合,我对分组依据子句有问题,

这是我表格中带有组合的部分:

CREATE TABLE sampleTable 
(
id serial primary key, 
sat1 varchar(3), 
sat2 varchar(3)
);
INSERT INTO sampleTable
(sat1, sat2)
VALUES
('LE7','LE7'),
('LE8','LE7'),
('LE7','LE7'),
('LE7','LC8'),
('LE7','LE8'),
('LE8','LE7'),
...

http://sqlfiddle.com/#!15/63104/2

我搜索组合的数量,但对我来说,组合 sat1,sat2与 sat2,sat1 相同。

我的(错误的(SQL代码:

select sat1, sat2, count(*) from sampleTable group by sat1, sat2 order by sat1

结果是:

sat1    sat2    count
1   LC8     LC8     27
2   LC8     LE7     17
3   LE7     LE7     200
4   LE7     LC8     22
5   LM1     LM2     2
6   LM1     LM1     12
7   LM2     LM2     6
8   LM2     LM1     3

但它应该通过以下方式:

sat1    sat2    count
1   LC8     LC8     27
2   LC8     LE7     39  (17+22 / line 2 & 4)
3   LE7     LE7     200
4   LM1     LM2     5   (2+3 / line 5 & 8)
5   LM1     LM1     12
6   LM2     LM2     6

有没有人解决我问题的SQL代码? 感谢您的帮助!!

使用 MINIMUM(( 和 GREATEST(( 来"简化"2 个分组列:

查询 1

select least(sat1, sat2), greatest(sat1, sat2), count(*) 
from sampleTable 
group by least(sat1, sat2), greatest(sat1, sat2)
order by least(sat1, sat2)

[结果][2]

| least | greatest | count |
|-------|----------|-------|
|   LC8 |      LC8 |    27 |
|   LC8 |      LE7 |    39 |
|   LE7 |      LE7 |   200 |
|   LM1 |      LM1 |    12 |
|   LM1 |      LM2 |     5 |
|   LM2 |      LM2 |     6 |

请参阅此 SQL 小提琴

最新更新