[英]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.