2016-09-07 5 views
0

これは私のSQLクエリです。これらの結果を垂直方向に表示します。私はまた、私は\x\g\xを使用してトグルモードをオンにすることがわかった私のためにGoogleを検索したが、私はその構文をどこに置くべきかわからない。私は、これはあなたの条件に一致することを願ってい私のクエリ結果をpostgresqlに垂直に表示するには?

enter image description here

   select 
      round(
      100.00 * 
      (sum(case when "WELL_AGE" <= '5' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" <= '5' then 1 else 0 end)),1) conc_arscbelow5_wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '6' AND "WELL_AGE" <= '10' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '6' AND "WELL_AGE" <= '10' then 1 else 0 end)),1) conc_arscbet6_10wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '11' AND "WELL_AGE" <= '15' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '11' AND "WELL_AGE" <= '15' then 1 else 0 end)),1) conc_arscbet11_15_wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '16' AND "WELL_AGE" <= '30' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '16' AND "WELL_AGE" <= '30' then 1 else 0 end)),1) conc_arscbet16_30wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '31' AND "WELL_AGE" <= '50' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '31' AND "WELL_AGE" <= '50' then 1 else 0 end)),1) conc_arscbet31_50wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" > '50' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" > '50' then 1 else 0 end)),1)conc_arscabove50_wellageGrp 


      from public."Arsenic_Test"; 
+0

このhttp://stackoverflow.com/questions/23060256/postgres-transpose-rows-to-columns –

+1

'\ x'コマンドはコマンドラインクライアント' psql'に対してのみ有効で、単純にSQLクエリの出力を "回転"します。 'psql'メタコマンド' \ x \ g \ x'はありません。 '\ g'は編集バッファから文を実行します。 –

+0

私のニーズを達成するためには何が必要ですか? –

答えて

0

:私のこのクエリは、このような出力を与え、

enter image description here

しかし、このような出力を得るために助けてください。 hstoreの使用

with t as (SELECT '80.13' aS "0-5", '80.7' AS "6-10", '81.6' AS "11-15", '84.27' AS "16-30", '84.04' AS "31-50", '85.33' AS ">50") 
SELECT * 
FROM (SELECT (each(hstore(t))).* FROM t) AS tmp (well_age, below10_conc_arsc_wells) 

は、あなたのテーブルでトンを交換してください。上のグループに

with t as (SELECT '80.13' aS "0-5", '80.7' AS "6-10", '81.6' AS "11-15", '84.27' AS "16-30", '84.04' AS "31-50", '85.33' AS ">50") 
SELECT * 
FROM (SELECT (json_each_text(row_to_json(t))).* FROM t) AS tmp (well_age, below10_conc_arsc_wells) 
0

使用range typeJSONの使用を参照してください

with r (r,s) as (values 
    (int4range(null,5,'[]'), '0 - 5'), 
    (int4range(6,10,'[]'), '6 - 10'), 
    (int4range(11,15,'[]'), '11 - 15'), 
    (int4range(16,30,'[]'), '16 - 30'), 
    (int4range(31,50,'[]'), '31 - 50'), 
    (int4range(50,null,'(]'), '>50') 
) 
select s, 100* count("CONC_ARSC" <= '10' or null)/count(*) 
from 
    public."Arsenic_Test" 
    inner join 
    r on "WELL_AGE" <@ r 
group by s; 
関連する問題