2010-11-23 58 views
0

我正在嘗試編寫一個查詢,它將在多個列上執行一個COUNT,將它們按各自的列分組。我真的必須爲此編寫8個不同的SQL查詢嗎?

這裏的查詢我現在所擁有的:

SELECT COUNT(*) as total, 
COUNT(q3_pay) as q3_pay_total, 
COUNT(q3_holidays) as q3_holidays_total, 
COUNT(q3_vacation) as q3_vacation_total, 
COUNT(q3_sick) as q3_sick_total, 
COUNT(q3_insurance) as q3_insurance_total, 
COUNT(q3_retirement) as q3_retirement_total, 
COUNT(q3_fsa) as q3_fsa_total 
FROM exit_responses 

我需要找到兩件事情:

  1. 的每個列數(列)響應的總數。
  2. 響應X的每個列數(列[X])<總數 - 例如

有沒有辦法爲我做這件事,而無需創建爲每列一個新的SQL查詢?

我目前有做到這一點像這樣的其他查詢:

SELECT COUNT(*) as total, q2 FROM exit_responses 
GROUP BY q2 

謝謝大家:)。

+4

這不是很清楚 - 你對每列有什麼計算?你能給出一些樣本數據和預期的輸出嗎? – 2010-11-23 14:55:55

+0

是使用所有這些字段設置的表exit_responses?你可以設置它的列名作爲一個字段值,然後只是由它分組?也許一個UNION查詢在計數之前進行歸一化.... – Leslie 2010-11-23 15:13:07

回答

1

您需要提供表格和一些示例行數據的定義。

話雖如此,下面的東西應該可以工作。

SELECT COUNT(*) as total, 
sum(nvl(q3_pay,0)) as q3_pay_total, 
sum(nvl(q3_holidays,0)) as q3_holidays_total, 
... 
FROM exit_responses 

不知道這是你在找什麼。

0

這取決於你的數據,如果這些是你想要的,但兩件事情可以做:

  1. GROUP BY所有不同的列,然後用COUNT(DISTINCT col)獲得該列不同值的數量

  2. GROUP BY任何合適的柱中,然後SUM(IF(col = 'xy',1,0))計數的值如何經常滿足某個條件

0

Count()將爲每列返回相同的數字。你需要做的是爲每一個SUM()。確保將每個值更改爲1,具體取決於內容。 (您可以使用總和內的一個案例來執行此操作)

0

正如其他人所說,請張貼DDL或表以及一些示例行和預期的輸出。

嗯,我不認爲這是你想要做的?

select 'Q3'     as quarter, 
     count(*)    as total, 
     count(q3_pay)   as q3_pay_total, 
     count(q3_holidays)  as q3_holidays_total, 
     count(q3_vacation)  as q3_vacation_total, 
     count(q3_sick)   as q3_sick_total, 
     count(q3_insurance) as q3_insurance_total, 
     count(q3_retirement) as q3_retirement_total, 
     count(q3_fsa)   as q3_fsa_total 
    from exit_responses 
union all 
select 'Q2'     as quarter, 
     count(*)    as total, 
     count(q2_pay)   as q2_pay_total, 
     count(q2_holidays)  as q2_holidays_total, 
     count(q2_vacation)  as q2_vacation_total, 
     count(q2_sick)   as q2_sick_total, 
     count(q2_insurance) as q2_insurance_total, 
     count(q2_retirement) as q2_retirement_total, 
     count(q2_fsa)   as q2_fsa_total 
    from exit_responses