Je ne sais pas si cela est possible dans une requête mysql, donc je peux simplement combiner les résultats via php.GROUP BY et SUM date distincte sur 2 tables
J'ai 2 tables: « utilisateurs » et « facturation »
Je suis en train d'activité globale du groupe pour chaque jour qui est disponible dans ces deux tableaux. Les 'utilisateurs' ne sont pas des données historiques, mais la 'facturation' contient un enregistrement pour chaque transaction.
Dans cet exemple, j'indique le statut d'un utilisateur que je souhaite additionner pour la date de création et les montants de dépôt que je souhaite également additionner par date de création. Je me rends compte qu'il y a un peu de déconnexion entre les données, mais j'aimerais les regrouper et les afficher comme indiqué ci-dessous. Cela va me montrer une vue d'ensemble de tous les utilisateurs par quand ils ont été créés et quels sont les statuts actuels à côté des transactions totales.
J'ai essayé UNION ainsi que LEFT JOIN mais je n'arrive pas à travailler.
L'exemple d'union est assez proche mais ne combine pas les dates en une seule ligne.
(
SELECT
created,
SUM(status) as totalActive,
NULL as totalDeposit
FROM users
GROUP BY created
)
UNION
(
SELECT
created,
NULL as totalActive,
SUM(transactionAmount) as totalDeposit
FROM billing
GROUP BY created
)
J'ai aussi essayé d'utiliser une table de recherche de date et se joindre aux dates, mais les valeurs de somme sont ajoutées plusieurs fois.
note: Je ne me soucie pas du tout des userIds mais je l'ai ici pour l'exemple.
utilisateurs Table (où le statut de '1' signifie "actif") (un enregistrement pour chaque utilisateur)
created | userId | status
2010-03-01 | 10 | 0
2010-03-01 | 11 | 1
2010-03-01 | 12 | 1
2010-03-10 | 13 | 0
2010-03-12 | 14 | 1
2010-03-12 | 15 | 1
2010-03-13 | 16 | 0
2010-03-15 | 17 | 1
table de facturation (enregistrement créé pour chaque instance d'une facturation "transaction"
created | userId | transactionAmount
2010-03-01 | 10 | 50
2010-03-01 | 18 | 50
2010-03-01 | 19 | 100
2010-03-10 | 89 | 55
2010-03-15 | 16 | 50
2010-03-15 | 12 | 90
2010-03-22 | 99 | 150
résultat souhaité:
created | sumStatusActive | sumStatusInactive | sumTransactions
2010-03-01 | 2 | 1 | 200
2010-03-10 | 0 | 1 | 55
2010-03-12 | 2 | 0 | 0
2010-03-13 | 0 | 0 | 0
2010-03-15 | 1 | 0 | 140
2010-03-22 | 0 | 0 | 150
Table décharge:
CREATE TABLE IF NOT EXISTS `users` (
`created` date NOT NULL,
`userId` int(11) NOT NULL,
`status` smallint(6) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `users` (`created`, `userId`, `status`) VALUES
('2010-03-01', 10, 0),
('2010-03-01', 11, 1),
('2010-03-01', 12, 1),
('2010-03-10', 13, 0),
('2010-03-12', 14, 1),
('2010-03-12', 15, 1),
('2010-03-13', 16, 0),
('2010-03-15', 17, 1);
CREATE TABLE IF NOT EXISTS `billing` (
`created` date NOT NULL,
`userId` int(11) NOT NULL,
`transactionAmount` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `billing` (`created`, `userId`, `transactionAmount`) VALUES
('2010-03-01', 10, 50),
('2010-03-01', 18, 50),
('2010-03-01', 19, 100),
('2010-03-10', 89, 55),
('2010-03-15', 16, 50),
('2010-03-15', 12, 90),
('2010-03-22', 99, 150);
Merci.Je reçois l'erreur suivante si: # 1248 - Chaque table dérivée doit avoir son propre alias – kenitech
L'alias tableau suivant fixe l'erreur, mais les valeurs ne sont pas additionnés correctement: Sélectez créé, somme (statut) comme totalActive, somme (transactionAmount) comme totalDeposit De (( SELECT créé, état , NULL comme transactionAmount FROM utilisateurs ) UNION ( SELECT créé, NULL comme état, transactionAmount FROM facturation )) comme x groupe par créé – kenitech
Ok merci. J'ai modifié la requête pour refléter vos modifications. J'ai aussi changé tous les NULL en zéros. –