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