2013-04-08 200 views
0

在一個查詢中是否可以有多個HAVING?HAVING子句在子查詢中的查詢

這裏是我的示例查詢:

SELECT household_tbl.household_connector_id AS h_id 
    , (
     SELECT COUNT(household_connector_id) 
     FROM household_tbl 
     WHERE household_connector_id = h_id 
      AND hh_phic_status = 1 
      AND age >= 21 
      AND age_category = "Year" 
     ) + (
     SELECT COUNT(hh_members_connector_id) 
     FROM tbl_household_members 
     WHERE household_connector_id = h_id 
      AND hh_phic_status = 1 
      AND hh_age >= 21 
      AND hh_age_category = "Year" 
     ) AS total_phic 
    , (
     SELECT COUNT(household_connector_id) 
     FROM household_tbl 
     WHERE household_connector_id = h_id 
      AND hh_phic_status = 1 
      AND age >= 21 
      AND age_category = "Year" 
      AND (
       hh_phic_membership_category = "ng sponsored" 
       OR hh_phic_membership_category = "Sponsored-NG(DOH)" 
       ) 
     ) + (
     SELECT COUNT(hh_members_connector_id) 
     FROM tbl_household_members 
     WHERE household_connector_id = h_id 
      AND hh_phic_status = 1 
      AND hh_age >= 21 
      AND hh_age_category = "Year" 
      AND (
       hh_phic_membership_category = "ng sponsored" 
       OR hh_phic_membership_category = "Sponsored-NG(DOH)" 
       ) 
     ) AS ng_sponsored 
FROM household_tbl 
WHERE barangay = "'.$barangay.'" 
HAVING total_phic <> 0 

我想也有 「具有ng_sponsored <> 0」

謝謝!

+0

怎麼樣增加'where子句'而不是'HAVING'? – TechDo 2013-04-08 04:51:09

+0

試試這個有total_phic <> 0和ng_sponsored <> 0 – 2013-04-08 04:53:29

+0

hello kabayan':)'你能指定表結構並告訴我們你想做什麼?無論如何恭喜你畢業.. – 2013-04-08 04:53:41

回答

-1

這樣做:

  Select * From 
      (
       SELECT household_tbl.household_connector_id as h_id, 
         (SELECT COUNT(household_connector_id) 
         FROM household_tbl 
         WHERE household_connector_id = h_id 
         AND hh_phic_status = 1 
         AND age >= 21 
         AND age_category = "Year") + 

        (SELECT COUNT(hh_members_connector_id) 
        FROM tbl_household_members 
        WHERE 
        household_connector_id = h_id 
        AND hh_phic_status = 1 
        AND hh_age >= 21 
        AND hh_age_category = "Year") 
        as total_phic, 


        (SELECT COUNT(household_connector_id) 
        FROM household_tbl 
        WHERE household_connector_id = h_id 
        AND hh_phic_status = 1 
        AND age >= 21 
        AND age_category = "Year" 
        AND (hh_phic_membership_category = "ng sponsored" OR hh_phic_membership_category = "Sponsored-NG(DOH)")) + 

        (SELECT COUNT(hh_members_connector_id) 
        FROM tbl_household_members 
        WHERE household_connector_id = h_id 
        AND hh_phic_status = 1 
        AND hh_age >= 21 
        AND hh_age_category = "Year" 
        AND (hh_phic_membership_category = "ng sponsored" OR hh_phic_membership_category = "Sponsored-NG(DOH)")) 
        as ng_sponsored 
        FROM household_tbl WHERE barangay = "'.$barangay.'" 
       )tbl Group By h_id,total_phic,ng_sponsored 
       HAVING total_phic <> 0 

您可以更換:

Group By h_id,total_phic,ng_sponsored HAVING total_phic <> 0 

通過

Where total_phic <> 0 
+0

謝謝你的幫助。我已經得到了答案:) – 2013-04-08 08:48:57

0

可以計算出一個滿足在子查詢的條件各count。此處需要的篩選運算符只有WHERE而不是HAVING,因爲外部查詢沒有進一步的聚合。

SELECT a.household_connector_id AS h_id, 
     COALESCE(b.totalCount, 0) + COALESCE(c.totalCount, 0) AS total_phic, 
     COALESCE(b.totalCountSponsored, 0) + COALESCE(c.totalCountSponsored, 0) AS ng_sponsored 
FROM household_tbl a 
     INNER JOIN 
     (
      SELECT household_connector_id, 
        COUNT(*) totalCount, 
        SUM(hh_phic_membership_category IN ('ng sponsored', 'Sponsored-NG(DOH)')) totalCountSponsored 
      FROM household_tbl 
      WHERE hh_phic_status = 1 AND 
        age >= 21 AND 
        age_category = "Year" 
      GROUP BY household_connector_id   
     ) b ON a.household_connector_id = b.household_connector_id 
     LEFT JOIN 
     (
      SELECT household_connector_id, 
        COUNT(*) totalCount, 
        SUM(hh_phic_membership_category IN ('ng sponsored', 'Sponsored-NG(DOH)')) totalCountSponsored 
      FROM tbl_household_members 
      WHERE hh_phic_status = 1 AND 
        hh_age >= 21 AND 
        hh_age_category = "Year" 
      GROUP BY household_connector_id 
     ) c ON a.household_connector_id = c.household_connector_id 
WHERE a.barangay = "barangay_value_HERE" AND 
     COALESCE(b.totalCount, 0) + COALESCE(c.totalCount, 0) <> 0 AND 
     COALESCE(b.totalCountSponsored, 0) + COALESCE(c.totalCountSponsored, 0) <> 0 

你也不能在其上在同級別創建因爲ALIAS是上SELECT子句創建和WHERE子句SELECT之前執行的WHERE子句中使用的ALIAS。下面是操作的完整的SQL命令,

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY子句
+0

謝謝你的幫助。我已經得到了答案:) – 2013-04-08 08:49:20

+0

很高興聽到這一點。你重組了查詢嗎? – 2013-04-08 08:50:25