2017-03-07 11 views
0

次の表を作成する必要があります。異なるwhere句で複数の列を取得するにはどうすればよいですか?

<style type="text/css"> 
 
.tg {border-collapse:collapse;border-spacing:0;} 
 
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} 
 
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} 
 
.tg .tg-baqh{text-align:center;vertical-align:top} 
 
.tg .tg-lap0{font-size:100%;text-align:center;vertical-align:top} 
 
.tg .tg-yw4l{vertical-align:top} 
 
</style> 
 
<table class="tg" style="undefined;table-layout: fixed; width: 593px"> 
 
<colgroup> 
 
<col style="width: 67px"> 
 
<col style="width: 72px"> 
 
<col style="width: 116px"> 
 
<col style="width: 116px"> 
 
<col style="width: 116px"> 
 
<col style="width: 106px"> 
 
</colgroup> 
 
    <tr> 
 
    <th class="tg-lap0">State</th> 
 
    <th class="tg-baqh">City</th> 
 
    <th class="tg-baqh">Three Days Ago</th> 
 
    <th class="tg-baqh">Two Days Ago</th> 
 
    <th class="tg-baqh">One Day Ago</th> 
 
    <th class="tg-baqh">Total</th> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    <td class="tg-yw4l"></td> 
 
    </tr> 
 
</table>

状態 DBエントリのカウントが同じ都市名のあるone_day_agoシンプル選択するが、three_days_ago、two_days_ago、です。 これはDB内の同じテーブルにあります。このようなもののような

だから私の画像私のクエリ:

$union = pg_query($db, 
" 
(
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND satelite LIKE 'AQUA_M-T' 
AND data_hora_gmt::date='$three_days_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
UNION ALL 
(
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND data_hora_gmt::date='$two_days_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
UNION ALL 
(
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND data_hora_gmt::date='$one_day_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
" 

しかし、私は同じ行に日付を入れる必要があるときに、このクエリは、1つの非常に長いテーブルが得られています。

+0

編集あなたの質問をし、サンプルデータと望ましい結果を提供は、*テキスト形式で*。 –

+0

皆さん、ありがとうございます。 PHPの後処理で解決されました... –

答えて

0

このような何かが、トリックを行う必要があり、実際のデータなしで伝えるのは難しい:それは読みやすいよう

with 
3d as (
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND satelite LIKE 'AQUA_M-T' 
AND data_hora_gmt::date='$three_days_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
, 2d as (
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND data_hora_gmt::date='$two_days_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
, 1d as (
SELECT estado, municipio, COUNT(*) 
FROM focos_bdq 
WHERE bioma LIKE 'Amazônia' 
AND data_hora_gmt::date='$one_day_ago' 
GROUP BY municipio, estado 
ORDER BY COUNT(*) DESC 
) 
select estado, municipio, d3.count,d2.count,d1.count,d3.count+d2.count+d1.count 
from d3 
left outer join d2 on d3.estado = d2.estado and d3.municipio = d2.municipio 
left outer join d1 on d1.estado = d2.estado and d1.municipio = d2.municipio 
関連する問題