MySql查询中的动态分组依据
我有一个MySql查询中的动态分组依据,mysql,sql,database,group-by,dynamicquery,Mysql,Sql,Database,Group By,Dynamicquery,我有一个employees表,其中有姓名、薪水、城市、国家、部门等字段。我还有一个用户输入,用户可以从我的employees表中选择多个列标题,例如城市、国家等。我需要进行一个动态查询,根据用户选择的所有字段进行分组,并返回结果。例如,按城市划分的所有工资总额、按国家划分的所有工资总额、按部门划分的所有工资总额、按国家划分的所有工资总额等 下面是我正在做的事情——(“$a”是我从下拉列表中得到的变量) 样本数据 NAME | SALARY | CITY | COUNTRY| DEPARTMENT
employees
表,其中有姓名、薪水、城市、国家、部门等字段。我还有一个用户输入,用户可以从我的employees表中选择多个列标题,例如城市、国家等。我需要进行一个动态查询,根据用户选择的所有字段进行分组,并返回结果。例如,按城市划分的所有工资总额、按国家划分的所有工资总额、按部门划分的所有工资总额、按国家划分的所有工资总额等
下面是我正在做的事情——(“$a”是我从下拉列表中得到的变量)
样本数据
NAME | SALARY | CITY | COUNTRY| DEPARTMENT
n1 50 Chi US Design
n2 100 Chi US Product
n3 500 SF US Engg
n5 20 SF US Engg
n1 200 SF US Product
如果“$a”=“city”,这就是我想要的
SUM(SALARY) | CITY
150 Chi
720 SF
这是我得到的
SUM(SALARY) | CITY | COUNTRY | DEPARTMENT
150 Chi NULL NULL
720 SF NULL NULL
问题是,如果用户只选择了城市
作为分组依据列,那么我还会看到部门
和国家
列中的所有空值。如何删除完全为空的列。这是实现这一目标的正确方法吗?以及如何删除完全具有空值的列。谢谢
JS Fiddle-使用Case语句选择所需字段。然后引用GROUPBY中的第一列1
SELECT
case when LOCATE('department', '$a$') > 0 then department
when LOCATE('city','$a$') > 0 then city
when LOCATE('country','$a$') > 0 then country
else Null
end as field,
sum(salary) as sum_salary,
from tbl_employees
GROUP BY 1
LIMIT 10000
样本数据和期望的结果将非常有用。@GordonLinoff完成,谢谢!请看@草莓-谢谢,这是小提琴-我只想实现基于字符串的动态分组-这不是一把小提琴:-(谢谢!但如果用户选择了多个分组依据,例如部门和国家/地区,该怎么办?在将预期输出添加到问题之前,我假设输出中只需要一个字段。如果我可以为具有多个字段的输出计算一些内容,则我将更新答案。没有订单依据的限制是毫无意义的
SELECT
case when LOCATE('department', '$a$') > 0 then department
when LOCATE('city','$a$') > 0 then city
when LOCATE('country','$a$') > 0 then country
else Null
end as field,
sum(salary) as sum_salary,
from tbl_employees
GROUP BY 1
LIMIT 10000