mysql - SQL 不同元素按相同元素计入一组

标签 mysql count group-by

我在按此元素计算组中的不同元素时遇到问题。

让我解释一下,我有两个表:

tb1
team  amount       
1     90                  
2     80                  
3     70                  
4     50                  
5     60

tb2   
team player 
5    1
1    1
3    2
1    2
2    2
1    3
3    3
4    3
5    3
2    4

预期的结果是:

 player  nb_team Sum_amount nb_player
   1       2        150       3
   2       3        240       4
   3       4        270       3
   4       1        80        2

我这样做:

SELECT tb2.player, COUNT(DISTINCT tb1.team) as nb_team,
SUM(tb1.amount) AS sum,
(SELECT COUNT(DISTINCT tb2.player) 
FROM tb2 where tb1.team=tb2.team) AS nb_player
FROM tb1, tb2
WHERE tb1.team=tb2.team
GROUP BY tb2.player
ORDER BY tb2.player ASC;

前 3 列是正确的,但我无法获得 nb_player 的正确值。

我要统计球队的数量包括多少球员

例如第一行结果:

玩家 1 在 2 支队伍中比赛,总共有 3 名玩家(玩家#1、#2 和#3)

有什么想法吗?

最佳答案

统计一个球员的球队数量并将这些球队的数量相加需要一个不同的结果集,而不是统计与同一球队中的给定球员一起比赛的球员。所以我建议使用两个不同的子查询,然后在播放器上加入它们。

SELECT teams_total.player, teams_total.nb_team, teams_total.`sum`, 
       players_total.nb_players
FROM
( SELECT tb2.player, COUNT(DISTINCT tb1.team) as nb_team,
  SUM(tb1.amount) AS `sum` 
  FROM tb1 JOIN tb2 ON tb1.team=tb2.team
  GROUP BY tb2.player ) teams_total
JOIN
( SELECT tb2_1.player, COUNT(DISTINCT tb2_2.player) as nb_players
  FROM tb2 tb2_1
  JOIN tb1 ON tb2_1.team=tb1.team
  JOIN tb2 tb2_2 ON tb2_2.team=tb1.team
  GROUP BY tb2_1.player ) players_total
ON teams_total.player=players_total.player
ORDER BY teams_total.player ASC;

关于mysql - SQL 不同元素按相同元素计入一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989649/

相关文章:

mysql - C fork 在 5 个 child 后停止

java - 以没有附加字母的较高碱基计数

arrays - 如何计算 Delphi 中 JSON 数组中元素的数量

javascript - 按数组分组并在主数组中添加字段和子数组

javascript - 需要按多选值数组进行分组

PHP/mySQL游戏积分系统

mysql - 用于更新列值的 sql 查询/脚本

mysql - 计算mysql中的元组

SQL - 如何按 id 进行分组并识别具有最高值的列?

mysql - 将 SQL 结果限制为使用 "in"搜索的每个 pkey 一个结果