Calcul de la somme des parties de la colonne sur la base d'une autre colonne à l'aide de QGIS Field Calculator?

16

Je voudrais calculer la somme des valeurs dans une colonne, basée sur les valeurs dans une autre colonne. Pour illustrer ma question, j'ai téléchargé l'image ci-dessous. La deuxième colonne se compose de codes postaux, le troisième total des ventes. Je voudrais savoir quel est le total des ventes par code postal? Donc dans ce cas:

Quelle est la somme de la colonne trois pour la valeur de la colonne deux 1023? La sortie devrait alors être 4 (0+1+1+2+0). La somme pour 1024alors devrait être 11,5 suivant la même logique.

Comme il s'agit d'un ensemble de données assez volumineux, j'aimerais que le calculateur de champ QGIS (ou tout autre outil) calcule un nouveau champ qui indique les ventes totales dans le code postal. Jusqu'à présent, je n'arrive pas à le faire fonctionner et j'espérais que quelqu'un ici pourrait m'aider.

Comme vous pouvez le voir, j'ai des valeurs manquantes, est-ce un problème de calcul? Peut-être bon de mentionner que c'est une table.

Exemple

Ammar
la source
devrait être 3 (0 + 1 + 1 + 2 + 0) ?? vraiment?
user7172

Réponses:

24

Mise à jour: QGIS 2.18 (07/07/2017):

Dans la calculatrice de champs , vous pouvez utiliser la fonction d' agrégationsum qui vous permet de additionner les valeurs d'une colonne en fonction d'une expression. Vous pouvez également, en option, grouper et filtrer les fonctionnalités pour la sommation. Ainsi, dans votre calculatrice de terrain, vous pouvez simplement utiliser:

sum( "Sum", "Sales")

Ce qui fait exactement la même chose que la méthode utilisant le plugin GroupStats .



Message d'origine: 02/03/2016

Utilisez le plugin GroupStats que vous devrez peut-être télécharger depuis Plugins> Gérer et installer les plugins .

Voici un exemple de couche utilisant certains des attributs que vous avez indiqués:

Couche

Alors disons:

  1. Exécutez le plug- in GroupStats , sélectionnez les champs appropriés pour la sommation ( Salespour les lignes; Sumpour les valeurs), puis cliquez sur Calculer . Vous devriez voir les résultats montrant la somme de chaque vente:

    Plugin GroupStats

  2. Enregistrez les résultats dans un fichier .csv à partir de la barre d'outils GroupStats:

    Exporter vers csv

  3. Réimportez le fichier .csv dans QGIS en le faisant glisser vers l'interface ou depuis la barre d'outils:

    Calque> Ajouter un calque> Ajouter un calque de texte délimité ( notez que les valeurs sont séparées par des points-virgules )

  4. Faites une jointure avec le fichier de formes et le fichier .csv, en faisant correspondre les Saleschamps:

    Se joint

  5. Le fichier de formes doit maintenant contenir les valeurs de somme du fichier .csv:

    Résultats

Vous pouvez, si vous le souhaitez, continuer à utiliser l' Save As...option sur le fichier de formes et l'enregistrer en tant que nouveau pour conserver les champs joints.

Joseph
la source
Il serait utile que le composant calculateur de champ de cette réponse comprenne les lignes SQL qui groupent et / ou filtrent. @Joseph
eyerah
@eyerah - L'expression sum( "Sum", "Sales")utilise "Sales"comme filtre de groupe, si c'est ce que vous voulez dire?
Joseph
1
Oh. Je vois ça maintenant. C'est ce que je voulais dire. Merci.
eyerah
11

Si vous effectuez une mise à jour vers la toute dernière version de QGIS 2.14, vous pouvez utiliser des couches virtuelles faisant une instruction sql comme:

SELECT "MYTABLE"."MYID", Sum("MYTABLE"."SALES")  AS zip_sale /*:int*/
FROM "MYTABLE"
GROUP BY "MYTABLE"."ZIPCODE"

L'interface utilisateur ressemble à:

entrez la description de l'image ici

Vous pouvez également utiliser le gestionnaire de base de données, où vous avez un générateur de requêtes derrière le bouton sql:

entrez la description de l'image ici

La colonne MYID peut être utilisée pour joindre les ventes additionnées à la table principale. L'onglet de jointure se trouve sous les propriétés du tabel.

Jetez un œil au changelog visuel de QGIS sousFeature: Virtual layers

Jakob
la source
6

Une façon de procéder est la suivante:

  • Dans la table attributaire, choisissez sélectionner par fonction. Tapez "nom_colonne" = 1023. Tous les champs avec la valeur 1023 sont sélectionnés.
  • Allez dans les outils vectoriels -> Outils d'analyse -> statistiques de base. Choisissez votre couche et la colonne avec les ventes. Assurez-vous de cocher la case "Valeurs sélectionnées uniquement". La somme sera affichée dans la fenêtre des résultats. Vous devez l'écrire;)
  • répéter les étapes pour chaque code postal
Miron
la source
1
PS Les valeurs manquantes ne posent aucun problème.
Miron
Il s'agit d'une approche simple et efficace. Cependant, cela pourrait prendre beaucoup de temps lors du traitement d'un grand ensemble de données, comme Ammar l'a mentionné ...
dru87