gpt4 book ai didi

MySQL选择性GROUP BY,使用最大值

转载 作者:行者123 更新时间:2023-11-29 13:16:14 27 4
gpt4 key购买 nike

我有以下(简化的)三个表格:

用户预订:

id | user_id |
1 | 3 |
1 | 3 |

用户_kar:

id | user_id | szak_id |
1 | 3 | 1 |
2 | 3 | 2 |

萨克:

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)。我尝试了 MAX(k.id) 和 HAVING,但似乎没有效果。

我想知道MySQL中是否有支持的方法,或者我应该首先选择后端站点上的所有用户ID,检查它们的最大kar.user_id,然后仅对这些进行计数,当计算给定的 szak 时,将它们从 id 列表中删除,然后在后端将数据重新构建在一起?

感谢您的帮助 - 我在谷歌上搜索了大约 2 个小时,但到目前为止,我没有找到解决方案,所以也许您可以帮助我。

最佳答案

类似这样的吗?

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;

关于MySQL选择性GROUP BY,使用最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21425516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com