sql >> Databasteknik >  >> RDS >> PostgreSQL

Dynamiska kolumnnamn i vy (Postgres)

Min första böjelse är att producera denna tabell:

+---------+-------+--------+
| Country | Month | Amount |
+---------+-------+--------+
| UK      | Jan   | 4      |
+---------+-------+--------+
| UK      | Feb   | 12     |
+---------+-------+--------+

etc. och vrid den. Så du skulle börja med (till exempel):

SELECT 
  c.country, 
  EXTRACT(MONTH FROM s.eldate) AS month, 
  COUNT(*) AS amount
FROM country AS c
JOIN site AS s ON s.country_id = c.id
WHERE 
  s.eldate > NOW() - INTERVAL '1 year'
GROUP BY c.country, EXTRACT(MONTH FROM s.eldate);

Du kan sedan koppla in det till en crosstab funktioner från tablefunc modul för att uppnå pivoten, gör något så här:

SELECT * 
FROM crosstab('<query from above goes here>') 
  AS ct(country varchar, january integer, february integer, ... december integer);


  1. Använder vilolägesverktyg för att omvända konstruera pojos från Postgres

  2. Hur kan vi ta reda på att en kolumn i min orakeltabell fylls/uppdateras av en utlösare av en annan tabell?

  3. Hitta alla partitionstabeller som ärver från huvudtabellen

  4. MySql välj alla rader i en tabell baserat på MAX-värdet i en annan tabell