【问题标题】:How to Sum amount of same role records?如何汇总相同角色记录的数量?
【发布时间】:2015-02-13 07:03:24
【问题描述】:

我想一次性获得多个相同的角色。当我获取某个代理(11150000001)介绍的代理详细信息记录时。它将返回大量具有不同角色的代理记录(1000,2000,3000,4000,5000,6000)。

从中我需要获得代理业务总额。现在我明白了。但是如果有相同角色的代理,我想获得相同角色代理的单笔金额,但我是分开获得的。

  //get all employee under one employee
            $rank1=''; $rank2='';$rank3='';$rank4='';$rank5='';$rank6='';
               $get_employee="SELECT emp_code,intro_code FROM emp_details WHERE intro_code='".$emp_code."'";
               $exe_employee=mysql_query($get_employee);

               while($fetch_emp=mysql_fetch_assoc($exe_employee))
               {
                     $total_amount1=0;
                     $role='';
                   $employee_code=$fetch_emp['emp_code'];
                   //echo $employee_code."<br>";
                   $get_premium="SELECT emp_code,user_role,premium_amount FROM business_details WHERE emp_code='".$employee_code."'";
                  //echo $get_premium."<br>";
                   $exe_premium=mysql_query($get_premium);

                   while($fetch_amount=mysql_fetch_array($exe_premium))
                   {
                      $total_amount1 +=$fetch_amount['premium_amount'];
                      $role=$fetch_amount['user_role'];  
                   }
              }
      echo $role."-".$total_amount1."<br>"; 
       // Role-Amount
       // 5000-75000
        //  5000-105000
        //3000-15000

在上图中,我在第 5 列中获得 10,500,但我想在第 5 列中获得 75000+10500。

下面是我的表结构:

【问题讨论】:

  • 耶!!我只是个初学者!!会尽快改进的!!
  • 您好。请不要在您的问题中添加乞求消息 - 我刚刚编辑了您的两条此类消息。请记住,这里的读者是志愿者,因此他们会在闲暇时回答他们觉得有趣的问题。我们认为 Stack Overflow 上的所有问题都同样重要。

标签: php mysql


【解决方案1】:

整个代码块都比单个 SQL 查询代替。你想创建一个pivot table

让我们从一个相对简单的查询开始,它获取所有员工角色组合的总数 premium_amount

SELECT emp_code,
       user_role,
       SUM(premium_amount) AS total_amount
FROM business_details
GROUP BY emp_code, user_role;

这将产生如下内容:

emp_code    | user_role | total_amount
-----------------------------------
15040000001 | 3000      |  15000     
15040000001 | 5000      | 180000
11130000001 | 4000      |  30000
11130000001 | 1000      |   5000

这已经包含了您在表格中需要的所有信息,但布局不正确。无需使用 PHP 将其重新格式化为表格所需的行/列,SQL 可以为我们完成。

我们将指定user_role 可以作为不同列的不同值,而不是按user_role 分组:

SELECT emp_code,
       SUM(CASE WHEN user_role=1000 THEN premium_amount ELSE 0 END) AS rank1,
       SUM(CASE WHEN user_role=2000 THEN premium_amount ELSE 0 END) AS rank2,
       SUM(CASE WHEN user_role=3000 THEN premium_amount ELSE 0 END) AS rank3,
       SUM(CASE WHEN user_role=4000 THEN premium_amount ELSE 0 END) AS rank4,
       SUM(CASE WHEN user_role=5000 THEN premium_amount ELSE 0 END) AS rank5,
       SUM(CASE WHEN user_role=5000 THEN premium_amount ELSE 0 END) AS rank6
FROM business_details
GROUP BY emp_code;

结果是:

emp_code    | rank1 | rank2 | rank3 | rank4 | rank5  | rank6
------------------------------------------------------------
15040000001 |     0 |     0 | 15000 |     0 | 180000 |     0
11130000001 |  5000 |     0 |     0 | 30000 |      0 |     0

奖金建议

您发布的 PHP 代码包含一个明显的安全漏洞,该漏洞使您的数据库(或者可能是您的整个系统)对任何人都开放。 SQL injection 在您的 Web 应用程序中不好玩!我已经在previous answer 中写过它。

【讨论】:

  • emp_code |用户角色 | total_amount ------------------------------------ 15040000002 | 4000 | 15000 15040000001 | 5000 | 180000 11130000001 | 4000 | 30000 11130000001 | 1000 | 5000 在上面的代码中,我想在第 4 位显示 45,000(30000+15000 具有相同的角色 4000)
  • sum case 查询显示语法错误可能是什么?我在此查询中第一次使用@Rodin
  • 我这里只是使用一些测试数据,如果有两个条目,一个30000,一个15000,它们共享相同的emp_code和user_role,查询会将它们相加。
  • 你提到过数据透视表。在这种情况下怎么做?你能指导我@rodin
  • 现在我怎样才能得到排名 1、rank2 等值以我的格式显示它@Rodin
【解决方案2】:

试试这个...

 $get_premium="SELECT emp_code,user_role,premium_amount,SUM(premium_amount) FROM business_details WHERE emp_code='".$employee_code."' group by user_role" ;

【讨论】:

  • 当我执行您的建议时,它返回以下查询“SELECT emp_code,user_role,premium_amount,SUM(premium_amount) FROM business_details WHERE emp_code='15040000001' group by user_roleSELECT emp_code,user_role,premium_amount,SUM(premium_amount) FROM business_details WHERE emp_code='11130000001' group by user_role
  • 现在我得到了两个代理的数量,但它仍然没有通过单一的总和来合并。因为两者都处于相同的代理角色
  • @paps k SELECT emp_code,user_role,premium_amount,SUM(premium_amount) FROM business_details group by user_role
  • 是的@deena!!一个代理可以添加多个具有唯一员工代码的代理
  • 发布你的表格结构
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 2022-01-20
  • 2020-09-19
  • 2018-01-09
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多