mam ten skrypt, gdzie jestem przyzwyczajony zrobić prostą projekcję dla dynamicznego wynikuBłąd MySQL: sql_mode = only_full_group_by
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
ale coś się nie uda; jak mam ten błąd:
1055 - Expression 5 z listy SELECT nie jest w klauzuli GROUP BY i zawiera nonaggregated kolumnie „mutuelle_bi.M.etat_bs”, które nie jest funkcjonalnie zależne od kolumn w klauzuli GROUP BY ; to niezgodna z sql_mode = only_full_group_by
Jak mogę zmienić mój skrypt na drodze do rozwiązania tego problemu, podano, że nie powinno się modyfikować dowolny plik konfiguracyjny z moim serwerem sql . i powinienem pisać tylko skrypty
Wszelkie sugestie?
Musisz użyć liczenia warunkowego zamiast podkwerend. – Shadow
Nie jest całkowicie jasne, czy chcesz zachować 'only_full_group_by', które można zmienić tylko dla bieżącej sesji, ale oczywiście jest to funkcja, która pomaga zapobiegać fałszywym wynikom. –
Możesz łatwo użyć funkcji 'ANY_VALUE()' w niezagregowanej kolumnie. Zobacz: http://stackoverflow.com/a/40578865/439171 –