mysql - 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
现在,我的客户想要启用对薪金元素的多选,并且报告应附带选定的多个薪金元素的总数,例如基本薪金和目标薪金的员工成本或所有薪金类型的员工成本。
这些工资元素来自另一个表并且是动态的。
实现它的最佳方法是什么。任何帮助,将不胜感激。
解决方案
因为这个查询的结果是在网页上使用的,所以一种选择是将逻辑从 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。
推荐阅读
- hyperledger-fabric - 基于链码方法级别的背书策略
- javascript - Javascript - 如何保存
- 添加到的元素
- 刷新后>?
- 添加到的元素
- regex - 如何在没有标签html的链接上搜索<和>上的空格
- python - Selenium WebDriver 因 NoSuchElementException 而失败
- java - Spring rest客户端,将响应对象的一部分解析为Set
- c - Why my encrypted text doesn't change?
- python - Kivy:图像的绝对位置和大小
- javascript - 为什么对象 obj.two 在声明时未定义
- javascript - 通过变量引用 DOM 元素
- phpstorm - PhpStorm 每 20 分钟崩溃一次