Wenn Sie Postgres verwenden, können Sie eine INNER JOIN
zwischen Unternehmen und Mitarbeitern tun, dann verwenden GROUP BY company_id
dann ein HAVING
zu
Die SQL würde wie folgt aussehen:
SELECT companies.*
FROM companies
INNER JOIN employees ON employees.company_id = companies.id
GROUP BY companies.id
HAVING COUNTD(employees.gender) == 1 AND MAX(CASE employees.gender = 'female' THEN 1 ELSE 0) > 0
Die mit Klausel ist ein bisschen schwierig. Die COUNTD(employees.gender) == 1
stellt sicher, dass Firmenangestellte alle vom gleichen Geschlecht sind, die MAX(CASE employees.gender = 'female' THEN 1 ELSE 0) > 0
stellt sicher, dass das Geschlecht weiblich ist (der MAX würde 0 bewerten, wenn sie alle männlich wären).
Und das Active gleichwertig aussehen würde:
Companies.joins(:employees).group("companies.id").having("COUNTD(employees.gender) == 1 AND MAX(CASE employees.gender = 'female' THEN 1 ELSE 0) > 0")
Beachten Sie, dass einige dieser ist datenbankspezifisch, also wenn Sie mich irgendwelche Fehler lassen kennen.
Welche Datenbank benutzen Sie? –
@AnthonyE Postgres – etlds