Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoRezo est partenaire de l'évènement DécryptaGéo 2017, le rendez-vous indépendant des professionnels de l'information géographique.

Rendez-vous les 24 et 25 janvier 2017 à l'ENSG, cité Descartes, Noisy-Champs.

Retrouvez le programme de l'évènement et le formulaire d'inscription sur le site de DécryptaGéo

#1 lun. 28 novembre 2016 14:46

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

SQLITE problème avec la fonction SUM

Bonjour,

je m'arrache les cheveux sur ce problème que je soumets à la communauté.

J'ai un BSD SQLITE avec des champs importés en FLOAT : ("POP1" FLOAT, "POP2" FLOAT).

Lorsque je veux faire la somme des données de mon champs le résultat obtenu est un entier (la virgule disparaît). SUM("POP1")

Comment faire pour récupérer l'ensemble des données et ne pas perdre des décimales en route ? Pour le moment j'ai essayé de réimporter mes tables en REAL et en NUMERIC mais rien n'y fait. J'ai également essayé avec la fonction TOTAL. Même résultat.

Merci pour votre aide !

Hors ligne

 

#2 lun. 28 novembre 2016 15:07

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 681
Site web

Re: SQLITE problème avec la fonction SUM

Salut,

Il n'y a pas un round() qui traine quelque part ?

Sinon une petite recherche me fait dire que le type float génère des problèmes d'arrondis et qu'il est conseillé d'utiliser un type numeric et donc de caster vos champs


The type DOUBLE is a floating point type represented in binary internally. Binary floating point numbers will produce "rounding errors" when converted to base 10. If you want precise numeric calculations with a decimal point, you'll have to use the NUMERIC or DECIMAL type.

Source : http://dba.stackexchange.com/questions/ … orrect-sum

Dernière modification par heretik25 (lun. 28 novembre 2016 15:09)


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#3 lun. 28 novembre 2016 15:14

tumasgiu
Moderateur
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 317

Re: SQLITE problème avec la fonction SUM

Salut,

vous pouvez donner la requête exacte ?
D'après la doc (et un petit test effectué rapidement avec la version 3.13),
le résultat  de la somme d'un ensemble de valeur
dont au moins l'une d'entre elle est de type REAL
est  bien de type REAL.

Le seul problème que je vois serait effectivement comme le dit heretik, un problème d'arrondi,
mais vous avez apparemment déjà testé la conversion en NUMERIC.

Dernière modification par tumasgiu (lun. 28 novembre 2016 15:17)

Hors ligne

 

#4 lun. 28 novembre 2016 15:33

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Merci pour ces premières infos.

Voici la requête complète :

CREATE TABLE DEP AS

SUM(SERIE_HIST_2013.P13_RP),
SUM(SERIE_HIST_2013.P08_RP)


FROM SERIE_HIST_2013

WHERE

SERIE_HIST_2013.DEP = '73';

L'idée est de récupérer les infos de la population sur l'ensemble du département.

La structure de la table SERIE_HIST_2013 est la suivante :

CREATE TABLE "SERIE_HIST_2013" ("CODGEO" TEXT PRIMARY KEY  NOT NULL  UNIQUE , "DEP" TEXT, "P13_POP" NUMERIC, "P08_POP" NUMERIC)

Hors ligne

 

#5 lun. 28 novembre 2016 16:12

tumasgiu
Moderateur
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 317

Re: SQLITE problème avec la fonction SUM

Vous pouvez tenter un

Code:

SELECT
typeof(SUM(SERIE_HIST_2013.P13_RP)),
typeof(SUM(SERIE_HIST_2013.P08_RP))
FROM SERIE_HIST_2013
WHERE
SERIE_HIST_2013.DEP = '73';

pour connaitre le type de retour de vos sommes ?

Edit:
La différence entre le nom des champs dans la somme et la table
est elle une faute de frappe ?

Dernière modification par tumasgiu (lun. 28 novembre 2016 16:22)

Hors ligne

 

#6 lun. 28 novembre 2016 16:26

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Merci.

Oui la différence est une erreur de frappe smile

Le type de mes sommes est REAL.

Dernière modification par vince100 (lun. 28 novembre 2016 16:28)

Hors ligne

 

#7 mar. 29 novembre 2016 10:03

tumasgiu
Moderateur
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 317

Re: SQLITE problème avec la fonction SUM

Et avec quoi visualisez vous vos résultats ?
Si comme moi vous utilisez sqlite manager (plugin firefox),
si un réel ne comporte que des zéros dans sa partie décimale
alors celle ci est tronquée à l'affichage.

Hors ligne

 

#8 mar. 29 novembre 2016 10:08

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

J'utilise SQLite, mais je n'ai strictement aucune décimale qui apparaît lorsque j'utilise SUM.

Lorsque j'observe la structure de la table crée à l'aide de SUM, le TYPE de mes champs n'est pas renseigné (voir capture d'écran).


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#9 mar. 29 novembre 2016 11:19

tumasgiu
Moderateur
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 317

Re: SQLITE problème avec la fonction SUM

Il faut savoir que le type des  données dans SQLite est dynamique,
contrairement à la majorité des autres RDBM, qui ont eux opté
pour un typage statique.

https://www.sqlite.org/datatype3.html

Une colonne d'une table SQLite n'a donc pas de type mais une affinité,
c'est à dire un type de données préferé, mais on peut stocker des données
de différent typesdans une même colonne.

La fonction sum pouvant renvoyer soit un entier soit un réel, en fonction
de son entrée, SQLite ne doit pas chercher à typer le résultat, et donc
ne fournit aucun type pour les colonnes lors de la création de la table.

Pour forcer le typage vous pouvez modifier votre requête :

Code:

SELECT CAST(SUM(ma_colonne) AS FLOAT)
--pour chaque appel de la fct sum.

Mais je ne sais pas si çà résoudra le problème.

Dernière modification par tumasgiu (mar. 29 novembre 2016 11:34)

Hors ligne

 

#10 mar. 29 novembre 2016 11:49

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

J'ai effectivement essayé de caster mon opération mais rien n'y fait...
Je suis sur que lorsque j'effectue ma SOMME ou mon TOTAL, SQLite ne prends pas en compte mes décimales (j'ai vérifié directement depuis mon tableur excel) ce qui fausse mon résultat.

Hors ligne

 

#11 mar. 29 novembre 2016 15:18

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 681
Site web

Re: SQLITE problème avec la fonction SUM

vince100 a écrit:

J'ai effectivement essayé de caster mon opération mais rien n'y fait...
Je suis sur que lorsque j'effectue ma SOMME ou mon TOTAL, SQLite ne prends pas en compte mes décimales (j'ai vérifié directement depuis mon tableur excel) ce qui fausse mon résultat.

Et si vous utilisez un round() a 3 chiffres par exemple ?


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#12 mar. 29 novembre 2016 15:26

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

J'ai testé ceci :

Code:

CREATE TABLE DEP AS

SELECT
TOTAL(ROUND (CC73.P13_RP,6)) AS NUMERIC,
TOTAL (ROUND(CC73.P08_RP,6)) AS NUMERIC

FROM CC73

WHERE

CC73.DEP = '73';

Mais rien n'y fait...


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#13 mar. 29 novembre 2016 18:07

Lsam
Membre
Date d'inscription: 27 nov. 2013
Messages: 84

Re: SQLITE problème avec la fonction SUM

Bonjour,

C'est très étonnant comme problème, je viens de tester avec sqlite, aucun souci de mon côté, j'ai bien toutes les décimales.

Peut-on voir toutes les valeurs CC73.P08_RP et CC73.P13_RP du département 73 ?

Et je ne comprends pas bien l'intérêt des 'AS NUMERIC' dans la requête précédente. Si c'était pour changer le type, il manque CAST.

Hors ligne

 

#14 mar. 29 novembre 2016 19:39

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Je poste en PJ une capture d'écran de ma table.

Pour info la commande SQL qui a crée l'objet :

Code:

CREATE TABLE "seriehist" ("CODGEO" TEXT PRIMARY KEY  NOT NULL  UNIQUE , "REG" TEXT, "REG2016" TEXT, "DEP" TEXT, "LIBGEO" TEXT, "P13_POP" NUMERIC, "P08_POP" NUMERIC, "D99_POP" NUMERIC, "D90_POP" NUMERIC, "D82_POP" NUMERIC, "D75_POP" NUMERIC, "D68_POP" NUMERIC, "SUPERF" NUMERIC, "NAIS0813" NUMERIC, "NAIS9908" NUMERIC, "NAIS9099" NUMERIC, "NAIS8290" NUMERIC, "NAIS7582" NUMERIC, "NAIS6875" NUMERIC, "DECE0813" NUMERIC, "DECE9908" NUMERIC, "DECE9099" NUMERIC, "DECE8290" NUMERIC, "DECE7582" NUMERIC, "DECE6875" NUMERIC, "P13_LOG" NUMERIC, "P08_LOG" NUMERIC, "D99_LOG" NUMERIC, "D90_LOG" NUMERIC, "D82_LOG" NUMERIC, "D75_LOG" NUMERIC, "D68_LOG" NUMERIC, "P13_RP" NUMERIC, "P08_RP" NUMERIC, "D99_RP" NUMERIC, "D90_RP" NUMERIC, "D82_RP" NUMERIC, "D75_RP" NUMERIC, "D68_RP" NUMERIC, "P13_RSECOCC" NUMERIC, "P08_RSECOCC" NUMERIC, "D99_RSECOCC" NUMERIC, "D90_RSECOCC" NUMERIC, "D82_RSECOCC" NUMERIC, "D75_RSECOCC" NUMERIC, "D68_RSECOCC" NUMERIC, "P13_LOGVAC" NUMERIC, "P08_LOGVAC" NUMERIC, "D99_LOGVAC" NUMERIC, "D90_LOGVAC" NUMERIC, "D82_LOGVAC" NUMERIC, "D75_LOGVAC" NUMERIC, "D68_LOGVAC" NUMERIC, "P13_PMEN" NUMERIC, "P08_PMEN" NUMERIC, "D99_PMEN" NUMERIC, "D90_NPER_RP" NUMERIC, "D82_NPER_RP" NUMERIC, "D75_NPER_RP" NUMERIC, "D68_NPER_RP" NUMERIC)

Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#15 mar. 29 novembre 2016 23:42

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Pour info j'utilise ce jeux de données :

J'importe mon fichier CSV dans ma base SQlite depuis SQlite Manager. Au cours de l'export il me demande si je veux modifier mes données et j'indique à SQlite la nature de mes données (TEXT, NUMERIC..) ainsi que le champ PRIMARY KEY et UNIQUE.

Lorsque j'observe la structure de ma table, j'observe ceci :

Code:

CREATE TABLE "base-cc-serie-historique" ("CODGEO" TEXT PRIMARY KEY  NOT NULL  UNIQUE , "REG" TEXT, "REG2016" TEXT, "DEP" TEXT, "LIBGEO" TEXT, "P13_POP" NUMERIC, "P08_POP" NUMERIC, "D99_POP" NUMERIC, "D90_POP" NUMERIC, "D82_POP" NUMERIC, "D75_POP" NUMERIC, "D68_POP" NUMERIC, "SUPERF" NUMERIC, "NAIS0813" NUMERIC, "NAIS9908" NUMERIC, "NAIS9099" NUMERIC, "NAIS8290" NUMERIC, "NAIS7582" NUMERIC, "NAIS6875" NUMERIC, "DECE0813" NUMERIC, "DECE9908" NUMERIC, "DECE9099" NUMERIC, "DECE8290" NUMERIC, "DECE7582" NUMERIC, "DECE6875" NUMERIC, "P13_LOG" NUMERIC, "P08_LOG" NUMERIC, "D99_LOG" NUMERIC, "D90_LOG" NUMERIC, "D82_LOG" NUMERIC, "D75_LOG" NUMERIC, "D68_LOG" NUMERIC, "P13_RP" NUMERIC, "P08_RP" NUMERIC, "D99_RP" NUMERIC, "D90_RP" NUMERIC, "D82_RP" NUMERIC, "D75_RP" NUMERIC, "D68_RP" NUMERIC, "P13_RSECOCC" NUMERIC, "P08_RSECOCC" NUMERIC, "D99_RSECOCC" NUMERIC, "D90_RSECOCC" NUMERIC, "D82_RSECOCC" NUMERIC, "D75_RSECOCC" NUMERIC, "D68_RSECOCC" NUMERIC, "P13_LOGVAC" NUMERIC, "P08_LOGVAC" NUMERIC, "D99_LOGVAC" NUMERIC, "D90_LOGVAC" NUMERIC, "D82_LOGVAC" NUMERIC, "D75_LOGVAC" NUMERIC, "D68_LOGVAC" NUMERIC, "P13_PMEN" NUMERIC, "P08_PMEN" NUMERIC, "D99_PMEN" NUMERIC, "D90_NPER_RP" NUMERIC, "D82_NPER_RP" NUMERIC, "D75_NPER_RP" NUMERIC, "D68_NPER_RP" NUMERIC)

Hors ligne

 

#16 mar. 29 novembre 2016 23:58

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Pour info j'utilise ce jeux de données : https://we.tl/R7UesU6Arc

J'importe mon fichier CSV dans ma base SQlite depuis SQlite Manager. Au cours de l'export il me demande si je veux modifier mes données et j'indique à SQlite la nature de mes données (TEXT, NUMERIC..) ainsi que le champ PRIMARY KEY et UNIQUE.

Lorsque j'observe la structure de ma table, j'observe ceci :

Code:

CREATE TABLE "base-cc-serie-historique" ("CODGEO" TEXT PRIMARY KEY  NOT NULL  UNIQUE , "REG" TEXT, "REG2016" TEXT, "DEP" TEXT, "LIBGEO" TEXT, "P13_POP" NUMERIC, "P08_POP" NUMERIC, "D99_POP" NUMERIC, "D90_POP" NUMERIC, "D82_POP" NUMERIC, "D75_POP" NUMERIC, "D68_POP" NUMERIC, "SUPERF" NUMERIC, "NAIS0813" NUMERIC, "NAIS9908" NUMERIC, "NAIS9099" NUMERIC, "NAIS8290" NUMERIC, "NAIS7582" NUMERIC, "NAIS6875" NUMERIC, "DECE0813" NUMERIC, "DECE9908" NUMERIC, "DECE9099" NUMERIC, "DECE8290" NUMERIC, "DECE7582" NUMERIC, "DECE6875" NUMERIC, "P13_LOG" NUMERIC, "P08_LOG" NUMERIC, "D99_LOG" NUMERIC, "D90_LOG" NUMERIC, "D82_LOG" NUMERIC, "D75_LOG" NUMERIC, "D68_LOG" NUMERIC, "P13_RP" NUMERIC, "P08_RP" NUMERIC, "D99_RP" NUMERIC, "D90_RP" NUMERIC, "D82_RP" NUMERIC, "D75_RP" NUMERIC, "D68_RP" NUMERIC, "P13_RSECOCC" NUMERIC, "P08_RSECOCC" NUMERIC, "D99_RSECOCC" NUMERIC, "D90_RSECOCC" NUMERIC, "D82_RSECOCC" NUMERIC, "D75_RSECOCC" NUMERIC, "D68_RSECOCC" NUMERIC, "P13_LOGVAC" NUMERIC, "P08_LOGVAC" NUMERIC, "D99_LOGVAC" NUMERIC, "D90_LOGVAC" NUMERIC, "D82_LOGVAC" NUMERIC, "D75_LOGVAC" NUMERIC, "D68_LOGVAC" NUMERIC, "P13_PMEN" NUMERIC, "P08_PMEN" NUMERIC, "D99_PMEN" NUMERIC, "D90_NPER_RP" NUMERIC, "D82_NPER_RP" NUMERIC, "D75_NPER_RP" NUMERIC, "D68_NPER_RP" NUMERIC)

Hors ligne

 

#17 mer. 30 novembre 2016 09:10

Lsam
Membre
Date d'inscription: 27 nov. 2013
Messages: 84

Re: SQLITE problème avec la fonction SUM

Bonjour,

J'ai essayé de mon côté d'importer le même jeu de données avec spatialite-gui. Malgré les bonnes options renseignées lors de l'import, il importe les valeurs avec des virgules... Du coup lors des sommes, il les traite comme du texte en s'arrêtant à la virgule, donc ne traite que la partie entière. Donc la somme est fausse et bien-sûr entière.

Vite fait une solution dans ta requête de somme (tu remplaces la virgule par un point) :

Code:

select sum(replace(P13_RP,',','.')) from "base-cc-serie-historique" WHERE DEP = '73';

Hors ligne

 

#18 mer. 30 novembre 2016 11:51

vince100
Membre
Date d'inscription: 8 oct. 2013
Messages: 57

Re: SQLITE problème avec la fonction SUM

Merci Lsam !

Effectivement il s'agissait d'une mauvaise importation des données dans SQlite. En remplaçant la virgule par un point comme délimiteur des décimales tout rentre dans l'ordre !

Merci à tous pour votre aide.

Hors ligne

 

#19 jeu. 01 décembre 2016 08:56

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 681
Site web

Re: SQLITE problème avec la fonction SUM

Quelle enquête rondement menée !


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |