在SQL中基于它对类似行进行分组并计算其他列

时间:2014-12-16 09:14:56

标签: sql postgresql group-by common-table-expression

我正在尝试在结果表上运行SQL查询,如下所示:

  name   |  property   |   col1   |   col2  
___________________________________________ 

 abc     |  temp.a     |   1      |   0
 abc     |  temp.b     |   1      |   0
 abc     |  perm.a     |   1      |   1
 abc     |  date       |   0      |   0
 abc     |  perm.b     |   1      |   0

我想对所有相似的行进行分组,并将col1和col2计为1而不是取总和,这看起来应该是这样的:

name   |   propertyname   |   count_col1   |  count_col2
___________________________________________________________
abc    |   temp.%         |   1            |  0
abc    |   perm.%         |   1            |  1
abc    |   date           |   0            |  0

我尝试了一些SQL查询,但它不起作用。我尝试使用公用表表达式(比如'with'关键字),但是有更好的方法来编写SQL吗?

1 个答案:

答案 0 :(得分:0)

SELECT name, split_part(property, '.', 1) AS propertyname
     , bool_or(col1) AS col1
     , bool_or(col2) AS col2
FROM   tbl
GROUP  BY 1, 2;

假设col1col2boolean(这里看起来最好)。如果您使用integer

CASE WHEN sum(col1) > 0 THEN 1 ELSE 0 END AS col1

split_part()在第一个点之前获取字符串的一部分,实现与您的示例相同。例如: