2 Stimmen

SQL-Join-Bedingungen

Drei Tische

cats
=============
id
cat_herder_id
size
color
birthday

collars
=============
id
cat_id
diameter
color
material

cat_herders
=============
id
name
age
height

Ich möchte eine Zeile für jeden Katzenhalter, die über einen Meter groß ist, mit einer Zählung der Anzahl der Katzen, die im Februar geboren wurden, die orange mit schwarzen Halsbändern sind, die zu diesem Halter gehören, und eine Zählung aller Katzen, die orange mit blauen Halsbändern sind, die zu jedem Halter gehören, wie würde ich gehen über eine Abfrage dieser Art zu tun.

Ich glaube nicht, dass ich einfach in der where-Anweisung angeben kann, weil meine Zählung nicht zu stimmen scheint, ich gruppiere nach cat_herders.id

EDIT: Weniger bereinigte, weniger abstrahierte Version dessen, was ich bis jetzt habe:

SELECT company.tblusers.first_name, company.tblusers.last_name, company.tblusers.userid, SUM(db.tasks.estimated_nonrecurring+db.tasks.estimated_recurring), COUNT(sugarcrm2.ncr_ncr.id),  
SUM(db.batch_log.time_elapsed) FROM company.tblusers 
INNER JOIN db.batch_log ON company.tblusers.userid = db.batch_log.userid 
INNER JOIN db.tasks ON db.batch_log.batch_id = db.tasks.batch_id
INNER JOIN sugarcrm2.ncr_ncr ON company.tblusers.first_name + " " + company.tblusers.first_name = sugarcrm2.ncr_ncr.employee
WHERE  departmentid = 8 AND DATE(db.batch_log.start_time) =  DATE(NOW()) GROUP BY userid

5voto

Joe Stefanelli Punkte 128819

Hinweis: Abhängig von Ihrem RDBMS und dem Datentyp der cats.birthday Spalte, müssen Sie diese Abfrage wahrscheinlich anpassen, um den Geburtsmonat zu extrahieren, aber dies gibt Ihnen eine allgemeine Vorstellung.

SELECT ch.name,
       SUM(CASE WHEN c.color = 'orange' AND cl.color = 'black' AND c.birthday = 'February' THEN 1 ELSE 0 END) AS OrangeCatsBlackCollarsFeb,
       SUM(CASE WHEN c.color = 'orange' AND cl.color = 'blue' THEN 1 ELSE 0 END) AS OrangeCatsBlueCollars 
    FROM cat_herders ch
        LEFT JOIN cats c
            INNER JOIN collars cl
                ON c.id = cl.cat_id
            ON ch.id = c.cat_herder_id
    WHERE ch.height > 1 /* in meters */
    GROUP BY ch.name

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X