I have a crosstab()
query like the following:
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, ...)
Simplified example, the actual query is really complex and contains important information. The above query returns N result rows after filtering with table.extra1 = val1
.
When I change the query as follows:
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
Added more possible values table.extra1 IN (val1, ...)
and a final condition WHERE extra1 = val1
. Now I get fewer rows than from the original one. To make it worse, if I add yet more values to IN (val1, ...)
, I get yet fewer rows. Why is that?