2014-10-29 61 views
0

我想通過創建數據庫的日期範圍來計算數據庫中的行數,以及它們是否是幾個郵政編碼之一。從語義上說,我想說的是在這段時間內計算這些郵政編碼的所有投訴。我的查詢看起來像這樣,使用多個AND&OR語句對SQL中的行進行計數

select COUNT(*) from complaints where created_date::date >= '2013-10-03' AND created_date::date <= '2014-05-31' AND incident_zip = 11209 OR incident_zip = 11201 OR incident_zip = 11202;

我似乎無法得到查詢到沒有OR聲明使得AND聲明毫無意義的運行。有人可以解釋如何對其進行分組,以便OR語句僅影響incident_zip列而不影響created_date列嗎?

回答

1

在這種情況下沒有必要對含incident_zip多個條款。相反,使用IN子句將它們組合在一起:

select COUNT(*) 
from complaints 
where created_date::date >= '2013-10-03' 
    AND created_date::date <= '2014-05-31' 
    AND incident_zip IN (11209, 11201, 11202); 
+0

謝謝!這正是我需要的! +1 – Tsiege 2014-10-30 01:17:56

+0

當然,沒問題。 – khampson 2014-10-30 01:18:45

1

使用括號(),以組的OR:

select COUNT(*) from complaints 
where created_date::date >= '2013-10-03' AND created_date::date <= '2014-05-31' 
AND (incident_zip = 11209 OR incident_zip = 11201 OR incident_zip = 11202); 

根據您的SQL語言,你也許可以這樣寫:

select COUNT(*) from complaints 
where created_date::date BETWEEN '2013-10-03' AND '2014-05-31' 
AND incident_zip IN (11209, 11201, 11202); 
相關問題