什么是在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
如果你在'select'中没有聚合函数,为什么你在这个查询中有'group by'? –