Je travaille dans MySQL et j'ai un peu de mal à construire une requête qui résumera les colonnes de deux tables. Je veux comparer la quantité de demandes par jour, pour une table contenant des enregistrements horaires et une table contenant l'agrégation quotidienne, par jour. Idéalement, la somme de chacun serait identique.Comment joindre correctement des tables et utiliser un groupe pour résumer des données dans MySQL?
Voici le schéma:
Tableau horaire:
CREATE TABLE requests_hourly (
customer_id INT,
date DATETIME,
requests BIGINT,
req_type SMALLINT);
Tableau quotidien
CREATE TABLE requests_daily (
customer_id INT,
date DATE,
requests BIGINT,
req_type SMALLINT);
ne fonctionne pas SQL pour me toutes les demandes, par req_type sur les deux tables pour Juin 2010
SELECT
SUM(h.requests),
SUM(d.requests),
h.req_type
FROM requests_hourly h
LEFT OUTER JOIN requests_daily d ON d.req_type = h.req_type
WHERE h.date >= '2010-06-01 00:00:00'
AND h.date < '2010-07-01 00:00:00'
AND d.date >= '2010-06-01 00:00:00'
AND d.date < '2010-07-01 00:00:00'
GROUP BY h.req_type;
J'ai le sentiment que l'erreur est dans le JOIN. Merci d'avance pour votre aide!
Réponse
je lui ai donné du crédit à Pierre pour la réponse, mais il a besoin d'un peu de modification. Voici donc le code MySQL SQL:
SELECT *
FROM
(SELECT SUM(requests) AS 'Daily Request Sum', req_type
FROM requests_daily
WHERE date BETWEEN '2010-06-01 00:00:00' AND '2010-07-01 00:00:00'
GROUP BY req_type, date) d
INNER JOIN
(SELECT SUM(requests) AS 'Hourly Request Sum', req_type
FROM requests_hourly
WHERE date BETWEEN '2010-06-01 00:00:00' AND '2010-07-01 00:00:00'
GROUP BY req_type, DATE(date)) h
USING (req_type, date)
Je suis sûr que vous devez sélectionner le champ "date" dans les deux instructions SELECT internes, sinon INNER JOIN ne pourra pas se joindre au champ "date". Et vous voudrez alors changer le premier "SELECT *" à; SELECT date, req_type, 'Somme de la demande horaire', 'Somme de la demande quotidienne' J'espère que tout a du sens ... –