【发布时间】:2014-05-19 19:24:57
【问题描述】:
我一直在尝试找到一个最佳解决方案来从每一列中选择唯一值。我的问题是我事先不知道列名,因为不同的表有不同的列数。所以首先,我必须找到列名,我可以使用下面的查询来做到这一点:
select column_name from information_schema.columns
where table_name='m0301010000_ds' and column_name like 'c%'
列名的示例输出:
c1, c2a, c2b, c2c, c2d, c2e, c2f, c2g, c2h, c2i, c2j, c2k, ...
然后我会使用 返回的 列名称来获取 每列 中的 唯一/不同 值,而不仅仅是 不同的行强>。
我知道一种最简单但很糟糕的方法是为每一列(大约 20-50 次)从 table where column_name = 'something' 中编写 select distict column_name ,这也非常耗时。由于每个 column_name 不能使用多个不同的值,因此我坚持使用这种老派的解决方案。
我确信会有一种更快、更优雅的方式来实现这一点,但我只是不知道怎么做。我将非常感谢您对此提供的任何帮助。
【问题讨论】:
-
由于每一列的行数都不同,并且唯一的列值不会再组合在一起,您希望得到怎样的结果?显示示例输出。另外,我们在谈论什么数据类型?
-
恐怕没有“更快、更优雅的方式来实现这一点”,但如果有的话我很感兴趣;)
-
如果您需要优化性能,请在您的问题中提供所有基本要素:示例表定义(包括索引)、基数(多少行?)、多少写入/时间单位 - 还是只读?定义并描述您在标题中提到的“条件”。它的选择性如何?可以采取哪些形式?结果中有多少个值?用例是什么?检查我添加的标签的信息:[postgresql-performance]。
标签: sql postgresql postgresql-9.1 postgresql-performance