2014-02-05 82 views
0

什麼是在MySQL中考慮Group By函數的最佳方式?MySQL按訂單和計數(獨特)

我正在寫一個MySQL查詢,以通過Excel中的數據透視表中的ODBC連接提取數據,以便用戶可以輕鬆訪問數據。

例如,我有:

Select 
statistic_date, 
week(statistic_date,4), 
year(statistic_date), 
Emp_ID, 
count(distict Emp_ID), 
Site 
Cost_Center 

我想算獨特的員工就需要通過網站的週數。我遇到的問題是在年底左右,日曆年並不總是匹配,所以按日期排列它們非常重要,以便我可以使用數據透視表手動篩選到正確的日期(2013/2014已有一週我們不得不增加第53周+第1周)。

我正在通過使用不同的語句組來進行實驗,但我不確定順序是如何變化的,以及當我切換它們時會發生什麼變化。

Group by week(statistic_date,4), Site, Cost_Center, Emp_ID 

VS

Group by Site, Cost_Center, week(statistic_date,4), Emp_ID 

其他注意事項:

-Employees可以工作任意天數。有些人正在工作4 x 10,其他人5 x 8,如果他們報名參加OT,可能需要第六天。如果我按周計算總數,我會得到每Emp_ID 3-7之間的任何地方。我希望本週能得到1分。

- 每位員工有不同的薪資代碼,因此當我們按日查看時(VTO =自願休假,OT =超過時間,LOA =休假等),獨特的計數有幫助。不同的計數會告訴我1,在同一天裏我經常會有2-3次爲同一個僱主(命中40個小時,並開始累計OT,然後採用VTO或在同一天使用個人時間)。

我開始寫一條查詢,瞭解我們每週的付費時間。我正在嘗試將其應用於此應用程序。實際代碼如下:

SELECT 
dkh.STATISTIC_DATE AS 'Date' 
,week(dkh.STATISTIC_DATE,4) as 'Week' 
,month(dkh.STATISTIC_DATE) as 'Month' 
,year(dkh.STATISTIC_DATE) as 'Year' 
,dkh.SITE AS 'Site ID Short' 
,aep.LOC_DESCR as 'Site Name' 
,dkh.EMPLOYEE_ID AS 'Employee ID' 
,count(distinct dkh.EMPLOYEE_ID) AS 'Distinct Employee ID' 
,aep.NAME AS 'Employee Name' 
,aep.BUSINESS_TITLE AS 'Business_Ttile' 
,aep.SPRVSR_NAME AS 'Manager' 
,SUBSTR(aep.DEPTID,1,4) AS 'Cost_Center' 
,dkh.PAY_CODE 
,dkh.PAY_CODE_SHORT 
,dkh.HOURS 

FROM metrics.DAT_KRONOS_HOURS dkh 

JOIN metrics.EMPLOYEES_PUBLIC aep 
ON aep.SNAPSHOT_DATE = SUBDATE(dkh.STATISTIC_DATE, DAYOFWEEK(dkh.STATISTIC_DATE) + 1) 
AND aep.EMPLID = dkh.EMPLOYEE_ID 

WHERE dkh.STATISTIC_DATE BETWEEN adddate(now(), interval -1 year) AND DATE(now()) 

group by dkh.SITE, SUBSTR(aep.DEPTID,1,4), week(dkh.STATISTIC_DATE,4), dkh.STATISTIC_DATE, dkh.EMPLOYEE_ID 
+0

如果你在'select'中沒有聚合函數,爲什麼你在這個查詢中有'group by'? –

回答

0

您在group by中使用的順序無關緊要。每個值的獨特組合都有自己的一組。選擇你沒有分組的列給你一些任意的結果;你可能想要在它們上使用一些聚合函數,比如SUM來獲得組總數。

按照您從其他值中派生出來的值進行分組,如下所示,這些值不是很有用。

week(dkh.STATISTIC_DATE,4), dkh.STATISTIC_DATE 

如果兩行有不同的星期,他們也會有不同的日期,對嗎?

+0

我也覺得這樣,但是沒有辦法做到這一點?我的意思是按該組在該組下按該組按年份排序,等等。 – Iqbal

+0

你得到的結果是「平坦的」,你不能在「其他結果」下面得到結果。您可以按網站,年份和星期對結果進行排序。 – Joni

+0

因此,如果我試圖找出在任何特定周內我們的名冊上有多少獨特員工(在任何薪酬代碼下列出了幾個小時; VTO,OT,Reg,LOA等),我如何計算每週不同的員工? –