gpt4 book ai didi

mysql - 高级 MySQL LEFT JOIN 查询的问题

转载 作者:行者123 更新时间:2023-11-29 13:18:05 24 4
gpt4 key购买 nike

我在下面有这个疑问。 “统计”表中有多行包含用户名。每台服务器 1 个。它根据统计表中包含用户名的行数不断复制杀死和死亡值。例如,如果用户名 Test 的 pvp 表中有 2 次击杀和 1 次死亡,并且统计表中有 2 行用户名为 Test,其中 1 行用于 server1,1 行用于 server2,那么在运行此查询时,它会显示 4 次击杀和 2 次死亡死亡人数。我不知道为什么。

这是一个 SQLFiddle:http://sqlfiddle.com/#!2/c7049/1

SELECT st.*, 
COALESCE(SUM(pvp.killer = st.username), 0) AS kills,
COALESCE(SUM(pvp.username = st.username), 0) as deaths,
COALESCE(ROUND(SUM(pvp.killer = st.username) / SUM(pvp.username = st.username), 2), 0.00)
as kd FROM stats AS st
LEFT JOIN pvp ON pvp.username = st.username OR pvp.killer = st.username
WHERE st.username="Username"

最佳答案

我认为您混淆了服务器详细信息,因此您可能需要在查询中使用 AND(st.server = pvp.server) (在 JOIN 条件中)

SELECT st.id,st.username,st.balance,st.xplevel,st.server,
COALESCE(SUM(pvp.killer = st.username), 0) AS kills,
COALESCE(SUM(pvp.username = st.username), 0) as deaths,
COALESCE(ROUND(SUM(pvp.killer = st.username) / SUM(pvp.username = st.username), 2), 0.00)
as kd
FROM stats AS st
LEFT JOIN pvp ON (pvp.username = st.username OR pvp.killer = st.username)
AND(st.server = pvp.server)
WHERE st.username="tacoboboy32"
GROUP BY st.id,st.username,st.balance,st.xplevel,st.server

此外,如果您不使用 GROUP BY,您将只能得到一行,因此只需按 st 中的每个字段进行分组即可。它将为您提供每个服务器的不同信息。

sqlFiddle

关于mysql - 高级 MySQL LEFT JOIN 查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212746/

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