2017-07-05 2 views
0

Pourquoi les deux commandes donnent-elles des résultats différents lors de l'utilisation de sqldf dans R?R, sqldf et moy. Pour ratio moyen

sqldf('select species, 
    avg([Petal.Width]/[Petal.Length]) 
    as petalratio from iris group by species') 

sqldf('select species, 
    ([Petal.Width]/[Petal.Length]) 
    as petalratio from iris group by species') 

Étant donné que le but est de trouver la moyenne des ratios pour chacune des 3 espèces.

Répondre

2
select species, 
avg([Petal.Width]/[Petal.Length]) as petalratio 
from iris 
group by species 

Cette requête en sortie la moyenne par espèce que vous utilisez une fonction d'agrégation avg. Cette requête génère de façon aléatoire une ligne par espèce car vous n'utilisez pas une fonction d'agrégation. Ceci n'est pas autorisé dans la plupart des bases de données, mais autorisé dans SQLite, qui est la base de données par défaut sqldf uses. Vous devez utiliser la première requête avec avg car c'est ce que vous essayez de faire.

+1

Il est étonnant que la requête du bas n'échoue pas. Résultats non fiables. D'autres RDBMS l'attraperaient. Mais bien sûr, MySQL n'autorise pas 'only_full_group_by' et les nouveaux utilisateurs sont mal introduits dans SQL! – Parfait

+1

Dans SQLite, la deuxième requête génère le rapport Petal.Width/Petal.Length pour la dernière ligne de chaque espèce. –

+0

Ces deux commentaires ont été très utiles, en particulier @ G.Grothendieck! – vashts85