嗨,我需要有关查询的帮助,我有一个trackdb表,我需要获取总计数,然后对每个用户进行排名。
trackdb
----------``
ID task task2 task3 task4 task5 task6 User Date
1 Clean Repair Emp1 1/1/2019
2 Repair Emp2 1/2/2019
3 Clean Emp1 1/5/2019
4 Repair Emp3 1/6/2019
5 Clean Emp1 1/10/2019
我想每个月完成每个用户的全部任务,然后对它们进行排名
SELECT用户,COUNT(在(任务=“清理”或任务=“修复”)然后1的情况下))作为总任务,计数(在(任务2 =“清洁”或任务3 =“修复”)的情况下,则1结束) )AS totaltask1,COUNT(CASE WHEN(task3 ='Clean'OR task3 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task4 ='Clean'OR task4 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task5 ='Clean'OR task5 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task6 ='Clean'OR task6 ='Repair')THEN 1 END)AS totaltask, FROM trackdb WHERE YEAR(date_received)='$ period'AND User ='$ empname'AND MONTH(date_received)='$ month'
$resultprod = mysqli_query($database,$queryprod);
$rowprod = mysqli_fetch_array($resultprod);
$totprod = $rowprod['totaltask'] + $rowprod['totaltask1'] + $rowprod['totaltask2'] + $rowprod['totaltask3'] + $rowprod['totaltask4'] + $rowprod['totaltask5'];
通过上述查询,我每年可以获得每月Emp1的总任务,但是如果与其他雇员相比,我还需要获得Emp1的排名。
希望有人可以提供帮助,在此先谢谢您!
答案 0 :(得分:0)
几个月前,我遇到了同样的问题。像这样将动态数据透视图与group_concat一起使用。
SET @sql_dynamic = (
SELECT
GROUP_CONCAT( DISTINCT
CONCAT(
'SUM( IF(MONTH(trx_date) = '
, MONTH(trx_date)
, ', amount,0) ) AS mo_'
, MONTH(trx_date)
)
)
FROM sales_table
);
SET @sql = CONCAT('SELECT name, ',
@sql_dynamic, '
FROM sales_table
GROUP BY name WITH ROLLUP'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
结果:
+ --------- + ------ + ------ + ------ + |名称| mo_1 | mo_2 | mo_3 | + --------- + ------ + ------ + ------ + |阿尔法| 375 | 815 | 375 | |布拉沃310 | 525 | 825 | |查理| 850 | 300 | 725 | |三角洲| 0 | 1000 | 370 | | NULL | 1535 | 2640 | 2295 | + --------- + ------ + ------ + ------ +