2016-08-03 13 views
-6

Ich kann nicht eine Datenbankabfrage, wie in diesem Bild machen:SQL Anfrage mit JOIN und COUNT

enter image description here

Hier ist das Datenbankschema:

CREATE Table Ages (
    id integer primary key, 
    Period varchar(10) 
); 
INSERT INTO Ages VALUES (1, '0-1'), (2, '1-2'), (3, '2-3'); 
CREATE TABLE Toys (
    id integer primary key, 
    age_id integer foreign key references Ages (id) 
); 
INSERT INTO Toys VALUES (1, 1), (2, 2), (3, 1), (4, 1); 
CREATE TABLE ToysUsers (
    id integer primary key, 
    uid integer, 
    tid integer foreign key references Toys (id) 
); 
INSERT INTO ToysUsers VALUES (1,1,1); 

I zu schaffen versuchen die Result Blick aus dem Bild mit etwas wie folgt aus:

SELECT 
    toys_age_groups.id, toys_age_groups.period, 
    COUNT(t3.age_id) as co 
FROM 
    toys_age_groups 
LEFT OUTER JOIN 
    (SELECT 
     t1.id, t1.age_id 
    FROM 
     `toys_toys` t1 
    LEFT JOIN 
     toys_user_toys t2 ON t2.tid = t1.id 
    WHERE 
     t2.id = ?) AS t3 ON toys_age_groups.id = t3.age_id 
GROUP BY 
    period 
ORDER BY 
    id ASC 
+1

Das ist zu schlecht ist. Was hast du probiert? – scsimon

+0

Können Sie erklären, was Sie tun müssen? –

+0

fügen Sie meine SQL-Anfrage – Madvan

Antwort

1

Wenn ich Wenn Sie Ihre Frage richtig lesen, erhalten Sie in der Ergebnistabelle die Alters-ID und den Zeitraum sowie die Anzahl der Spielsachen pro Alters-ID und Zeitraum. Hier ist, wie Sie diese Abfrage schreiben würden:

SELECT Ages.ID, Ages.Period, IFNULL(sub.cnt,0) AS Count 
FROM Ages LEFT JOIN 
(SELECT Toys.age_id, COUNT(*) AS cnt 
FROM Toys 
GROUP BY Toys.age_id) sub 
ON Ages.ID = sub.age_id 
+0

müssen durch benutzerdefinierte toys_users.uid (Variable) von Spielzeug ausschließen, wo toys.id = toys_users.tid – Madvan

0

Ty kbball!

Aktualisieren Sie einfach ur Skript

SELECT 
    Ages.ID, Ages.period, IFNULL(sub.cnt,0) 
AS 
    Count 
FROM 
    Ages 
LEFT JOIN 
    (SELECT 
     Toys.age_id,UserToys.uid , COUNT(*) AS cnt 
    FROM 
     Toys 
    LEFT JOIN 
     UserToys 
    ON 
     UserToys.tid = Toys.id 
    WHERE 
     UserToys.uid <> 1 
    OR 
     UserToys.uid IS NULL 
    GROUP BY 
     Toys.age_id 
    ) sub 
ON 
    Ages.id = sub.age_id