2010-11-09 26 views
2

J'utilise GROUP BY pour agréger sur un article par mois. Je voudrais le SUM d'une colonne et le produit d'un autre. Je ne trouve pas d'opérateur de produit en ligne ou dans mon livre ... mais y a-t-il une série d'autres opérateurs qui vont construire l'opérateur de produit? En un rien, je peux faire fonctionner le produit dans R, qui est l'endroit où les données se dirigent, mais j'aimerais minimiser la quantité de boucle que je fais.Existe-t-il un opérateur de produit (ou de travail) dans SQLite?

Merci!

Mise à jour: OK, donc je voulais vraiment créer un agrégateur de produits pour renvoyer le produit d'une colonne à R. En essayant de répondre à une question en aval, j'ai trouvé la réponse. Il existe déjà une bibliothèque de fonctions communes non incorporées dans SQLite (le Healey functions). Je peux facilement utiliser ces fonctions dans R en utilisant une bibliothèque (RSQLite.extfuns). Je peux donc créer l'agrégateur de produits en exponentiant la somme des logs. Merci à DWin pour showing moi la pièce maîtresse de la bibliothèque RQLite.extfuns.

Répondre

3

Vous pouvez ajouter votre propre opérateur global en utilisant create_function().

+0

qui le fera! Merci! –

+0

OK, questions de débutant ... Où puis-je sauvegarder la fonction C? Comment je l'appelle? Dois-je compiler? Mon googling et mon livre supposent que je connais les aspects de gestion interne de C et de l'API SQLite. Merci! –

+1

create_function est juste un appel de fonction, mais les fonctions que vous devez lui passer pour implémenter votre fonction d'agrégation sont des fonctions que vous devez écrire et compiler. "Les septième, huitième et neuvième paramètres, xFunc, xStep et xFinal, sont des pointeurs vers les fonctions en langage C qui implémentent la fonction SQL ou l'agrégat.Une fonction SQL scalaire nécessite uniquement une implémentation du callback xFunc, les pointeurs NULL doivent être passés comme Paramètres xStep et xFinal Une fonction SQL agrégée nécessite une implémentation de xStep et xFinal et un pointeur NULL doit être passé pour xFunc. " –

2

Si le nombre de lignes par groupe est assez petit, vous pouvez utiliser group-concat pour renvoyer tous les multiplicandes pour R.

+0

Cela sera également utile. Merci! –