Sujet : Re: Transformer une BD .sqlite en .js avec python version 3.8
De : use.reply.to (at) *nospam* INVALID.ADDRESS (Benoit Izac)
Groupes : fr.comp.lang.pythonDate : 09. May 2022, 16:19:37
Autres entêtes
Message-ID : <87r1523i12.fsf@izac.org>
References : 1 2 3
Bonjour,
Le 09/05/2022 à 08:06, msamandine a écrit dans le message
<
bdidnQWQmvHJMuX_nZ2dnUU7_8zNnZ2d@giganews.com> :
SELECT nb_enfants, genre,
SUM(CASE WHEN articles = 1 THEN nb END) '1_article',
SUM(CASE WHEN articles = 2 THEN nb END) '2_articles',
SUM(CASE WHEN articles = 3 THEN nb END) '3_articles',
SUM(CASE WHEN articles = 4 THEN nb END) '4_articles'
FROM (
SELECT nb_enfants, genre, articles, count(*) nb
FROM t
GROUP BY nb_enfants, genre, articles
)
GROUP BY nb_enfants, genre;
>
Merci pour cette solution. Par contre, je cherchais un bout de code
qui puisse générer ce genre de table automatiquement, sans que l'on
précise à chaque fois "article = 4", article = 3, etc. En effet, la BD
que j'ai mis en ligne n'est qu'un extrait. En réalité, j'ai plus de
900 entrées. Est-il possible d'automatiser ce morceau de code ?
>
Et, pour ce qui est de Python, c'est juste que j'intègre ensuite ce
bout de code à mon code Python :)
À ma connaissance sqlite n'a pas de fonction pivot ou crosstab donc
autant le faire en python (pas super testé donc à corriger si
nécessaire) :
import sqlite3
con = sqlite3.connect('test.sqlite3')
cur = con.cursor()
sep = '|'
d = {}
max_articles = 0
for nb_enfants, genre, articles, nb in cur.execute('''
SELECT nb_enfants, genre, articles, count(*) nb
FROM t
GROUP BY nb_enfants, genre, articles'''):
if articles > max_articles: max_articles = articles
d.setdefault((nb_enfants, genre), {})[articles] = nb
print('nb_enfants', 'genre', sep=sep, end=sep)
for i in range(max_articles):
print(f'{i+1}_article{"s" if i+1 > 1 else ""}', end=sep)
print()
for k, v in d.items():
nb_enfants, genre = k
print(nb_enfants, genre, sep=sep, end=sep)
for i in range(max_articles):
print(v.get(i+1, 0), end=sep)
print()
Là c'est juste de l'affichage mais je pense que tu pourrais directement
générer ton graphique.
-- Benoit Izac