gpt4 book ai didi

mysql - 跨两个表进行选择 - 不确定是加入还是合并?

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:04 26 4
gpt4 key购买 nike

我有两个表:

  1. que - 包含 bot_idplayer_id
  2. bot_inventory - 包含 bot_iditem_id

我希望查询的输出是一个按 bot_id 分组的列表,其中有一列计数 (player_id) 和另一列计数 (`item_id)。这应该仅基于在队列中找到的 bot_id。

我试过了:

SELECT `que`.`bot_id`,
Count(`que`.`player_id`) AS players,
Count(`bot_inventory`.`item_id`) AS items
FROM `que`
LEFT JOIN `bot_inventory`
ON `que`.`bot_id` = `bot_inventory`.`bot_id`
ORDER BY `que`.`bot_id`

但结果不对:/任何帮助将不胜感激!

最佳答案

你说“结果不对”。我认为这意味着 COUNT 聚合返回的值比您预期的要大。原因是 que 中的一行与 bot_inventory 中的多行匹配,并且 COUNT 聚合将计算行数,而不是不同的玩家数。

如果 (bot_id,player_id) 在 que 表中是唯一的,那么对“玩家”计数的一个简单修复是添加 DISTINCT 关键字:

COUNT(DISTINCT q.player_id) as players,

相同的模式同样适用于“项​​目”计数,如果它是唯一的话。

实际上,您的查询看起来也缺少

GROUP BY que.bot_id

(这是juergen d在他的回答中指出的问题,一开始我没注意到。)

否则,您可以重写查询以使用内联 View 来获取计数,例如

SELECT q.bot_id
, q.players
, b.items
FROM ( SELECT p.bot_id, COUNT(p.player_id) AS players
FROM que p
GROUP BY p.bot_id
) q
LEFT
JOIN ( SELECT d.bot_id, COUNT(d.item_id) AS items
FROM bot_inventory d
GROUP BY d.bot_id
) b
ON b.bot_id = q.bot_id
ORDER BY q.bot_id

关于mysql - 跨两个表进行选择 - 不确定是加入还是合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17617809/

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