簡體   English   中英

如何使用不同的where子句檢索多列計數?

[英]How to retrieve multiple columns count with different where clause?

我需要構造下表。

 <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> 

城市是簡單選擇,而three_days_ago,two_days_ago,one_day_ago是相同城市名稱的數據庫條目計數。 所有這些都在數據庫的同一表中。

因此,我將查詢圖像描述如下:

$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 
)
"

但是,當我需要將日期放在同一行中時,此查詢將導致一個非常長的表。

沒有實際數據很難分辨,這樣的事情應該可以解決:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM