【发布时间】:2019-09-05 23:10:49
【问题描述】:
我正在尝试在 Postgres 中查询一些数据,我想知道如何使用某种模式匹配而不仅仅是选择行 - 例如SELECT * FROM schema.tablename WHERE varname ~ 'phrase' - 但要在 SELECT 语句中选择列,特别是根据这些列的通用名称来选择。
我有一张表格,其中包含许多年来的比率估计值 - 例如,每年采摘的苹果 - 以及每年的上下 95% 置信区间。 (作为参考,每个估计和 95% CI 都来自不同的来源——准确地说是一份书面报告;这些来源是我的行,表格描述了每个来源的各个方面。根据下面的评论,我认为它是重要的是读者要知道,这个关系数据库中的分析单位是一份书面报告,其中对每年采摘的东西有不同的估计——一张桌子上的苹果,另一张桌子上的橙子,三分之一的梨。)
所以在这张表中,每一年都有三列/变量:
rate_1994
low_95_1994
high_95_1994
问题是,CI 大多为空 - 它们没有被填写。在我的查询中,我真的只是想提取每年的费率:所有以 rate_ 开头的变量。如何在我的 SELECT 声明中表达这一点?
我正在尝试使用 regexp_matches 来执行此操作,但我不断收到错误消息。
我已经在 StackOverflow 上做了一些探索,我觉得它甚至可能是不可能的,但我正在努力确定。如果不可能,很容易将表格分成两个新表格:一个只包含费率,另一个包含 CI。
(为了记录,我看过这样的帖子: Selecting all columns that start with XXX using a wildcard?)
提前致谢!
【问题讨论】:
-
这是一个糟糕的数据设计。您应该有一个表格,其中有一列用于期间,另一列用于值。
-
@stickybit 我不关注。你能说得更具体点吗?
-
不是为每年添加一个新列,而是有一个表格并为每年添加一行。使用
WHERE year LIKE 'rate%'或类似名称很容易在其中进行搜索。 -
@stickybit 啊,我明白了,谢谢。这是有道理的,但问题在于,整个数据库所围绕的实体是一组书面报告,对同一现象有不同的估计。例如,报告 A 估计了 1996 年和 2002 年采摘的苹果,而报告 B 估计了 2000 年和 2008 年的苹果。表 1 是关于例如苹果和表 2 是关于采摘的橙子。例如,在表 2 中,报告 B 可能没有橘子的估计值,但 A 有,而不同的报告,报告 C 也有。当我着手组织这个数据库时,这就是有意义的方式。
-
为带有 id 和它的水果的报告创建另一个表格。向具有值的表添加另一个标识报告的列。问题解决了,关系方式。
标签: database postgresql