繁体   English   中英

MySQL GROUP BY ...具有不同的值相同的字段

[英]MySQL GROUP BY…HAVING different values same field

我想使用类似于以下内容的查询来检索events中的所有行,这些行至少有一个对应的'male''female' event_attendances行。 以下查询不返回任何行(其中肯定有一些events具有来自两个性别的event_attendances )。

有没有一种方法可以在没有子查询的情况下执行此操作(由于在我的应用程序中生成SQL的方式,子查询对我来说实现起来要困难得多)?

SELECT * FROM events e
LEFT JOIN event_attendances ea ON (e.id = ea.event_id)
GROUP BY e.id
HAVING ea.gender = 'female' AND ea.gender = 'male'

使用

HAVING sum(ea.gender = 'female') > 0 
   AND sum(ea.gender = 'male') > 0

要么

HAVING count(distinct ea.gender) = 2

顺便说一句,你应该使用子查询来获取分组时的所有数据。

SELECT * 
FROM events
where id in
(
    SELECT events.id 
    FROM events
    LEFT JOIN event_attendances ON (events.id = event_attendances.event_id)
    GROUP BY events.id
    HAVING count(distinct event_attendances.gender) = 2
)

HAVING通常与聚合函数一起使用。

您应该进行self-join以获得所需的结果,因为ea.gender = 'female' AND ea.gender = 'male'是矛盾的,它总是返回空集。

你可以试试这个

SELECT T1.* 
FROM events T1 
INNER JOIN 
(SELECT events.id 
    FROM events
    LEFT JOIN event_attendances ON (events.id = event_attendances.event_id)
    GROUP BY events.id
    HAVING COUNT(DISTINCT event_attendances.gender) = 2) T2 ON T1.events.id=T1.events.id

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM