Hi there,
if I order a given year in DESCending ORDER, so that the highest values (of a given variable) for the countries are displayed at the top of the list, then actually the NULL values appear as first. Only below, I find the values ordered correctly.
Is there any way to
a) make the countries with NULL values appear at the bottom of the list b) neglect the NULL values by still allowing the countries to be displayed

Not sure what you mean by (b), but (a) is straightforward enough.

=> SELECT * FROM (SELECT 1 as a UNION SELECT 2 UNION SELECT null::int) AS foo ORDER BY (a is null), a DESC;
 a
---
 2
 1

(3 rows)

Looks easy.

If I apply this to my SQL:

SELECT
        SUM(CASE WHEN year=2002 THEN value ELSE NULL END) AS "y_2002",
        SUM(CASE WHEN year=2001 THEN value ELSE NULL END) AS "y_2001",
        SUM(CASE WHEN year=2000 THEN value ELSE NULL END) AS "y_2000",
        c.name AS name
FROM
        aquacult_prod_marine AS d
LEFT JOIN
        countries AS c ON c.id = id_country
GROUP BY
        name
ORDER BY
        y_2000 DESC

I would then say:

ORDER BY
        (y_2000 is null),
        y_2000 DESC

But then I get an Error warning:

        ERROR:  column "y_2000" does not exist

What do I do wrong?

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match

Reply via email to