Lors de l'utilisation de GROUP BY
vous ne pouvez pas SELECT
les champs qui ne font pas partie du GROUP BY
ou utilisé dans une fonction d'agrégation. Ceci est spécifié par la norme SQL, bien que certaines bases de données choisissent d'exécuter de telles requêtes de toute façon. Puisqu'il n'y a pas de manière unique et correcte d'exécuter une telle requête, ils ont tendance à simplement choisir la première ligne qu'ils trouvent et à la renvoyer, de sorte que les résultats varient de manière imprévisible.
On dirait que vous essayez de dire :
"Pour chaque publication, obtenez-moi la somme des comptes Twitter, Facebook et LinkedIn pour cette publication".
Si oui, vous pourriez écrire :
SELECT publication,
sum(twitter_count) AS twitter_sum,
sum(linkedin_count) AS linkedin_sum,
sum(facebook_count) AS facebook_sum
FROM "articles"
WHERE "articles"."user_id" = 1
GROUP BY publication;
Traduire cela en ActiveRecord/Rails... à vous de voir, je ne l'utilise pas. Il semble que ce soit à peu près ce que vous avez essayé d'écrire, mais ActiveRecord semble le déformer, essayant peut-être d'exécuter les sommes localement.