我有以下(简化)三个表:
user_reservations:
id | user_id |
1 | 3 |
1 | 3 |
user_kar:
id | user_id | szak_id |
1 | 3 | 1 |
2 | 3 | 2 |
szak:
id | name |
1 | A |
2 | B |
现在我想用'szak'这个名字计算用户的预订,但是我想让每个用户只计算一个szak。在这种情况下,user_id有2个'szak',如果我写一个类似的查询:
SELECT sz.name, COUNT(*) FROM user_reservations r
LEFT JOIN user_kar k ON k.user_id = r.user_id
LEFT JOIN szak s ON r.szak_id = r.id
它将返回两行:
A | 2 |
B | 2 |
但是我希望每个预订只计算一个szak(仅限最高ID)。我用HAVING尝试了MAX(k.id),但似乎无效。
我想知道在MySQL中是否有支持的方法,或者我应该首先在后端站点上选择所有用户ID,检查它们的最大kar.user_id,然后只计算那些,当计算给定的szak时,将它们从id列表中删除,然后在后端一起构建数据?
感谢您的帮助 - 我在谷歌上搜索了2个小时,但到目前为止,我找不到任何解决方案,所以也许您可以帮助我。
答案 0 :(得分:1)
这样的东西?
SELECT sz.name,
Count(*)
FROM (SELECT r.user_id,
Ifnull(Max(k.szak_id), -1) AS max_szak_id
FROM user_reservations r
LEFT OUTER JOIN user_kar k
ON k.user_id = r.user_id
GROUP BY r.user_id) t
LEFT OUTER JOIN szak sz
ON sz.id = t.max_szak_id
GROUP BY sz.name;