Je souhaite calculer le coefficient de Gini pour un certain nombre d'ensembles, contenant dans un tableau à deux colonnes (ici #cits
) contenant une valeur et un ensemble -ID. J'ai expérimenté avec différents calculs de coefficient de Gini, décrit here (StackExchange query) et here (StackOverflow question with some good replies). Les deux exemples ne calculent qu'un seul coefficient pour une table, alors que je voudrais le faire avec une clause GROUP BY
.Syntaxe SQL pour l'instruction complexe GROUP BY avec OVER: calcul du coefficient de Gini pour plusieurs ensembles
La table #cits
contient deux colonnes, c
et cid
, respectivement la valeur et l'ID de jeu.
Voici mon essai actuel (incomplet):
select count(c) as numC,
sum(c) as totalC,
(select row_number() over(order by c asc, cid) id, c from #cits) as a
from #cits group by cid
sélection des oeuvres CSPN et TOTALC bien, bien sûr, mais la ligne suivante me donne un mal de tête. Je peux voir que la syntaxe est fausse, mais je ne peux pas comprendre comment assigner le row_number()
par c par cid.
EDIT: Sur la base des suggestions, j'ai utilisé partition
, comme ceci:
select cid,sumC = sum(a.id * a.c)
into #srep
from (
select cid,row_number() over (partition by cid order by c asc) id,
c
from #cits
) as a
group by a.cluster_id1
select count(c) as numC,
sum(c) as totalC, b.sumC
into #gtmp
from #cits a
join #srep b
on a.cid = b.cid
group by a.cid,b.sumC
select
gini = 2 * sumC/(totalC * numC) - (numC - 1)/numC
from #gtmp
Cette presque œuvres. J'obtiens un résultat, mais il est> 1, ce qui est inattendu, car le coefficient de Gini devrait être compris entre 0 et 1. Comme indiqué dans les commentaires, j'aurais préféré une solution à une requête, mais ce n'est pas un problème majeur du tout.
Je pense que vous recherchez la partie partition de row_number, qui est votre "grouping". 'row_number() over (partition par c, ordre cid par c asc, cid)' – scsimon
On dirait que tu as raison - j'ai regardé dans la partition depuis que j'ai posé cette question ici, et je pense que je suis proche d'une solution - même si m'a demandé d'utiliser deux requêtes ... Je voulais un, pour la beauté de celui-ci;) – ipoga
vous pouvez en avoir un enveloppé dans un CTE, besoin de moi pour vous montrer? – scsimon