【发布时间】:2019-07-25 19:40:48
【问题描述】:
我有一个crosstab() 查询,如下所示:
SELECT *
FROM crosstab(
'SELECT row_name, extra1, extra2..., another_table.category, value
FROM table t
JOIN another_table ON t.field_id = another_table.field_id
WHERE t.field = certain_value AND t.extra1 = val1
ORDER BY row_name ASC',
'SELECT category_name FROM category_name WHERE field = certain_value'
) AS ct(row_name text, extra1 text, extra2 text, ...)
简化示例,实际查询非常复杂且包含重要信息。上面的查询在使用table.extra1 = val1 过滤后返回N 个结果行。
当我按如下方式更改查询时:
SELECT *
FROM crosstab(
'SELECT row_name, extra1, extra2..., another_table.category, value
FROM table t
JOIN another_table ON t.field_id = another_table.field_id
WHERE t.field = certain_value AND t.extra1 IN (val1, ...) --> more values
ORDER BY row_name ASC',
'SELECT category_name FROM category_name WHERE field = certain_value'
) AS ct(row_name text, extra1 text, extra2 text, ...)
WHERE extra1 = val1; --> condition on the result
添加了更多可能的值table.extra1 IN (val1, ...) 和最终条件WHERE extra1 = val1。现在我得到 less 行比原来的行。更糟糕的是,如果我向IN (val1, ...) 添加更多值,我会得到更少 行。这是为什么呢?
【问题讨论】:
标签: sql postgresql sql-order-by distinct crosstab