簡體   English   中英

根據不同的值對一列進行平均,對其他列進行分組

[英]Average of one column based on distinct values and group by of other columns

這是我正在使用的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

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

您需要在“分組”組中包括作業號。

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,那么與平均水平較低的職位相比,平均水平較高的職位的記錄可能更多

暫無
暫無

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

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