【发布时间】:2015-02-14 13:19:12
【问题描述】:
我正在尝试对这样的结果表运行 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 的方法?
【问题讨论】:
-
对于
temp.%和perm.%,count_col1不会是 2 吗?如果它计算了底层行? -
到目前为止你尝试过什么?你的基础数据是什么样的?你怎么知道何时停止
property的匹配?比如说,如果你有一个'tent'值,或者'temporary',或者别的什么,会发生什么? -
@StuartLC 是的,count_col1 应该是 2。但是如果它有助于理解问题,请考虑这个例子:我有一个地址,例如。 34, gold street,brooklyn, NY, 11201。这个地址有很多部分,比如州、邮编、街道地址 1、街道地址 2,它们作为不同的字段存储在数据库中。如果这些部分中的任何一个被更新,那么我想将地址更新显示为 1(作为一个整体而不是显示 3 个不同的更新)。我希望我的例子很清楚?
-
@NehaMoharir 可以提供 DDL 和示例数据吗?
-
与往常一样,表定义(psql 中的
\d tbl)和您的 Postgres 版本会有所帮助。特别是,列可以为 NULL 吗?您的具体数据类型是什么?
标签: sql postgresql group-by common-table-expression