【发布时间】:2017-09-29 22:22:06
【问题描述】:
我有这个脚本,用于对动态结果进行简单投影
SELECT
M.nom_utilisateur,
SUM(M.montant_bulletin ) as Montant_Total_BS,
SUM(M.montant_payer ) as Montant_Total_payer,
COUNT(M.ref_bs ) as nbr_bs_total,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Remboursé")) as nbr_bs_total_payer,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Non remboursé")) as nbr_bs_non_payer,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "En cours")) as nbr_bs_en_cours,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Nouveau")) as nbr_bs_nouveau
FROM mutuelle_bi.`Mutuelle` M
WHERE M.nom_assurence = "Star"
GROUP BY M.nom_utilisateur
但是出了点问题;因为我有这个错误:
1055 - SELECT 列表的表达式 #5 不在 GROUP BY 子句中,并且 包含非聚合列“mutuelle_bi.M.etat_bs”,它不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 不兼容
我该如何修改我的脚本来解决这个问题, 鉴于我不应该修改我的 sql server 的任何配置文件。我应该只写脚本
有什么建议吗??
【问题讨论】:
-
你必须使用条件计数而不是子查询。
-
不完全清楚您是否要保留
only_full_group_by,它只能针对当前会话进行更改,但当然是一个有助于防止伪造结果集的功能。 -
您可以在非聚合列中简单地使用
ANY_VALUE()函数。见:stackoverflow.com/a/40578865/439171
标签: mysql