PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Truy vấn PostgreSQL với các cột được tạo

select 
t1.name,
sum(case when t2.abbrev='foo' then t1.amount*t2.amount else 0 end) as foo,
sum(case when t2.abbrev='bar' then t1.amount*t2.amount else 0 end) as bar,
sum(case when t2.abbrev='baz' then t1.amount*t2.amount else 0 end) as baz
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name;

Ví dụ về SQL Fiddle: http://sqlfiddle.com/#!15/cc84a/6;

Sử dụng hàm PostgreSQL sau cho các trường hợp động:

create or replace function sp_test()
returns void as
$$

declare cases character varying;
declare sql_statement text;
begin

select string_agg(concat('sum(case when t2.abbrev=','''',abbrev,'''',' then t1.amount*t2.amount else 0 end) as ', abbrev),',') into cases from points;

drop table if exists temp_data;

sql_statement=concat('create temporary table temp_data as select 
t1.name,',cases ,' 
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name ');

execute sql_statement;

end;
$$
language 'plpgsql';

Hàm sử dụng bảng tạm thời để lưu trữ dữ liệu cột động.

Gọi hàm theo cách sau để lấy dữ liệu:

select * from sp_test(); select * from temp_data;




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị tiếp theo của PostgreSQL của các chuỗi?

  2. Song song đến với VACUUM

  3. python thêm E vào chuỗi

  4. Docker &Postgres:Không liên kết được địa chỉ tcp 0.0.0.0:5432 đã được sử dụng

  5. Thêm X giờ - @Query - Spring Data JPA