首页 > 解决方案 > mysql查询多列值的总和,其中列名来自选择列表

问题描述

我正在创建一个报告,其中我在选择框中显示基本工资、目标奖金、津贴等工资元素,并按城市、国家、等级等显示员工总成本数据。在后端,工资元​​素是员工明细表的表头。

所以我的查询看起来像这样,其中薪水类型来自网页的薪水元素选择框:

    SELECT d.city, 
       d.country, 
       d.business_level_3, 
       d.level, 
       d.function, 
       d.performance_rating, 
       d.gender, 
       d.grade, 
       Count(d.user_id)             AS hc, 
       rate * Sum(d."+salarytype+") AS Sum_of_employee_cost, 
       rate * Avg(d."+salarytype+") AS Employee_cost_avg, 
       rate * Max(d."+salarytype+") AS Employee_cost_max, 
       rate * Min(d."+salarytype+") AS Employee_cost_min, 
       Sum(d."+salarytype+")        AS cost_o 
FROM   employee_salary_details d 
       INNER JOIN manage_country c 
               ON c.NAME = d.country 
       INNER JOIN currency_rates r 
               ON r.from_currency = c.currency_id 
WHERE  r.to_currency = "+to_currency+" 
GROUP  BY city, 
          country, 
          business_level_3, 
          level, 
          function, 
          performance_rating, 
          gender, 
          grade 

现在,我的客户想要启用对薪金元素的多选,并且报告应附带选定的多个薪金元素的总数,例如基本薪金和目标薪金的员工成本或所有薪金类型的员工成本。

这些工资元素来自另一个表并且是动态的。

实现它的最佳方法是什么。任何帮助,将不胜感激。

标签: mysqlsql

解决方案


因为这个查询的结果是在网页上使用的,所以一种选择是将逻辑从 SQL 端移到前端。修改 SQL 查询以返回您需要的所有列,让您的后端将所有数据提供给前端,然后前端(Javascript)可以根据页面上选择的属性。

或者,在构造要发送的 SQL 查询时,组装 SQL 查询的后端逻辑可以有更多的逻辑。例如,在 PHP 中:

$sql = <<<SQL
SELECT d.city, 
       d.country, 
       d.business_level_3, 
       d.level, 
       d.function, 
       d.performance_rating, 
       d.gender, 
       d.grade, 
       Count(d.user_id)             AS hc,
SQL;

if ($userOnlyPickedOneThing) {
  $sql += "rate * SUM(d." . $selectedColumn . ") AS Sum_of_employee_cost, ";
} else if ($userPickedTwoThings) {
  $sql += "rate * (SUM(d." . $thingOne . ")+SUM(d." . $thingTwo . ") AS Sum_of_employee_cost, ";
}

根据请求的结构,您可以更加零碎地构建 SQL。


推荐阅读