简体   繁体   English

msyql 中的计数和排名,PHP

[英]Count and RANK in msyql , PHP

Hi I need help with my query, i have a trackdb table that i need to get total count then rank them per user.嗨,我的查询需要帮助,我有一个 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

I want to get the total task done for each User per month then Rank them我想每月为每个用户完成总任务,然后对他们进行排名

SELECT User,COUNT(CASE WHEN (task='Clean' OR task='Repair') THEN 1 END ) AS totaltask ,COUNT(CASE WHEN (task2='Clean' OR task3='Repair') THEN 1 END ) 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' SELECT User,COUNT(CASE WHEN (task='Clean' OR task='Repair') THEN 1 END ) AS totaltask ,COUNT(CASE WHEN (task2='Clean' OR task3='Repair') THEN 1 END ) 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 , 从 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'];

I was able to get the total task of Emp1 per month per Year with the above query however i needed to get also the rank of Emp1 if compared with the other Employee.通过上述查询,我​​能够获得每年每月 Emp1 的总任务,但是如果与其他员工相比,我还需要获得 Emp1 的排名。

Hope someone can help, Thanks in Advance!希望有人能帮忙,提前致谢!

I've the same problem a few months ago.几个月前我也有同样的问题。 Use dynamic pivot with group_concat like this.像这样使用带有 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;

Result:结果:

+---------+------+------+------+ | +---------+------+------+------+ | name |姓名 | mo_1 | mo_1 | mo_2 | mo_2 | mo_3 | mo_3 | +---------+------+------+------+ | +---------+------+------+------+ | Alfa |阿尔法 | 375 |第375话815 |第815话375 |第375话| | Bravo |布拉沃 | 310 |第310话525 |第525话825 |第825话| | Charlie |查理 | 850 | 850 | 300 | 300 | 725 |第725话| | Delta |三角洲 | 0 | 0 | 1000 | 1000 | 370 |第370话| | NULL |空 | 1535 |第1535章2640 | 2640 | 2295 | 2295 | +---------+------+------+------+ +---------+------+------+------+

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM