2014-04-29 181 views
0

以下是我正在使用的SQL。但平均而言,並不是取決於不同的工作數量,而是全部使用它們。基於不同值和其他列的列的平均值

我想獲得平均工作時間和獨特工作的總數,由客戶。平均時間只能基於唯一的工作號碼。

SELECT CUSTOMER, COUNT(DISTINCT JOB_NO) AS JOB_COUNT, AVG(WORK_TIME) AS WT 
FROM CYCLE_TIME 
GROUP BY CUSTOMER 

任何幫助將不勝感激。

查爾斯,我用你的第一個查詢,並與一個客戶進行測試。對於具有以下WT值的客戶,我獲得了5份工作。 28.95, 24.72, 2.56, 15.14, 8.94。這是一個平均值16.06

如果我使用以下查詢並且只有客戶羣組,平均值(WT)最終爲22.39。我不確定那裏發生了什麼。

SELECT CUSTOMER, JOB_NO, AVG(WORK_TIME) AS WT 
FROM CYCLE_TIME 
WHERE CUSTOMER='customer_a' 
GROUP BY CUSTOMER 

回答

0

使用自己的計算基於SUM()/COUNT(DISTINCT)AVG

SELECT 
    CUSTOMER, 
    COUNT(DISTINCT JOB_NO) AS JOB_COUNT, 
    SUM(WORK_TIME)/COUNT(DISTINCT JOB_NO) AS WT 
FROM CYCLE_TIME 
GROUP BY CUSTOMER 
0

您需要包括本集團在作業號。

SELECT CUSTOMER, JOB_NO, AVG(WORK_TIME) AS WT 
FROM CYCLE_TIME 
GROUP BY JOB_NO, CUSTOMER 

,如果你也想知道每個客戶有多少job_nos了,這需要在一個獨立的子查詢

SELECT ct.CUSTOMER, 
    (Select Count (Distinct JOB_NO) 
    From CYCLE_TIME 
    where CUSTOMER = ct.Customer) JOB_COUNT, 
    JOB_NO, AVG(WORK_TIME) AS WT 
FROM CYCLE_TIME ct 
GROUP BY JOB_NO, ct.CUSTOMER 

牢牢記住的平均不一定是整體平均水平。一個工作可能有更多的記錄比另一個。

運行此查詢,你會看到其中的差別:

SELECT ct.CUSTOMER, Count(*) numRecords, 
    (Select Count (Distinct JOB_NO) 
    From CYCLE_TIME 
    where CUSTOMER = ct.Customer) JOB_COUNT, 
    JOB_NO, AVG(WORK_TIME) AS WT 
FROM CYCLE_TIME ct 
GROUP BY JOB_NO, ct.CUSTOMER 

如果你總平均值爲22.39,則有與高職位平均作業可能更多的記錄數大於那些有低工作平均水平

+0

查爾斯,我試過第一個查詢,並在我原來的職位詳細的結果。我不確定這是我們應該如何回覆帖子 – user3101337