有人可以帮我如何分组吗?我有这个查询,我需要的是按“条件”和“group_program”对金额进行分组,即
我有这个查询:
SELECT at_ce.condicion, gpr.grupo_programa FROM at_cons_externa at_ce
INNER JOIN gen_programa gpr ON at_ce.id_programa = gpr.id_programa
我可以用这条线分组:
select condicion, count(*) as cantidad from at_cons_externa group by condicion
但我也想将“group_program”分组,在同一个句子中,并用属于每个人的数量,我希望你能帮助我,谢谢......
能够使用聚合函数 COUNT、SUM 等。您必须将所有其他不计入计数、添加等的列分组。
例子:
可以在from中引入这两个select:
接受的答案包含您需要的内容。只是为了支付我对“数据透视表”所做的评论,我在这里放了一个生成它的选项。
例如,“行标题”将是 的值,
condicion
列标题将是 的值grupo_programa
(我生成了 100 个随机值来测试这个工作是否正常)。首先,让我们将感兴趣的值放入一个临时表中,以免我们一遍又一遍地编写相同的查询
要使此解决方案起作用,必须确保该函数
GROUP_CONCAT()
可以返回长字符串。一般来说,我在这里提出的价值是绰绰有余的:现在到了很酷的部分:我们将生成一个表达式列表,表中存在的每个列值加起来为 1,
grupo_programa
否则为 0。这些表达式将存储在变量 (@sql
) 中:现在让我们完成我们正在生成的查询:
如果您想查看完整查询的结果,可以这样检查:
现在是的,让我们获取值: 准备并执行我们刚刚创建的查询:
结果:
最后一行(
NULL
列中的值condicion
)包含每列的总数(此值在您使用时生成GROUP BY ... WITH ROLLUP
;如果您不需要它,只需删除WITH ROLLUP
)。完成后,不要忘记“清理”准备好的语句:
我希望这个解决方案对你有用。
干杯