Mysql 如何在sql中合并计数值

Mysql 如何在sql中合并计数值,mysql,sql,sql-server,sqlite,tsql,Mysql,Sql,Sql Server,Sqlite,Tsql,我正在尝试将表格团队的所有城市值更新为:“城市”+“#p”+“球员数量”+“g”+“前进目标数量”(例如,“东京”#p25 g74) 我试着这样做,有两个问题。一个用于获取球员数量,一个用于获取进球数量 查询玩家数量: select t.city + '#p' + CONVERT(varchar(10), count(pt.playerId)) + '#g' from team t, player_team pt where pt.teamID =

我正在尝试将表格团队的所有城市值更新为:“城市”+“#p”+“球员数量”+“g”+“前进目标数量”(例如,“东京”#p25 g74)

我试着这样做,有两个问题。一个用于获取球员数量,一个用于获取进球数量

查询玩家数量:

select  t.city + '#p' + CONVERT(varchar(10), count(pt.playerId)) + '#g' 
from    team        t, 
        player_team pt 
where   pt.teamID = t.teamID 
group By t.teamId,t.city
查询目标数:

select  count(*) totalgoals,
        pt.teamID 
from    goals       g, 
        player_team pt 
where   g.playerId = pt.playerId 
group by pt.teamID
我无法合并这两个计数。 请帮帮我

还有我的表层次结构和字段,如下图所示

player 
(
    playerID        int, 
    firstName       nvarchar(25), 
    lastName        nvarchar(25), 
    nationality     varchar(25), 
    birthDate       smalldatetime, 
    age             smallint, 
    position        varchar(25)
)

team 
(
    teamID  int,
    name    nvarchar(50), 
    city    nvarchar(25)
)

player_team 
(
    playerID    int, 
    teamID      int, 
    season      varchar(5)
)

match 
(
    matchID         int,
    homeTeamID      int, 
    visitingTeamID  int, 
    dateOfMatch     smalldatetime, 
    week            tinyint
)

goals 
(
    matchID     int, 
    playerID    int, 
    isOwnGoal   bit, 
    minute      tinyint
)
编辑:使用下面给出的Select查询工作正常,并给出正确的结果。但是如何使用这多条记录更新表?当我试图将其作为子查询更新为update语句时,它会给我带来编译错误并抱怨多记录


错误:子查询返回的值超过1。当子查询在=、!=、=或者,当子查询用作表达式时。

假设您的两个查询正在生成所需的结果,请尝试将它们与外部联接和子查询组合起来:

select  pt.teamId, 
  t.city + ' #p' + CONVERT(varchar(10), count(pt.playerId)) 
         + ' g' + CONVERT(varchar(10), t2.totalgoals)
from    team        t
  inner join player_team pt on pt.teamID = t.teamID 
  left join (
      select  count(*) totalgoals,
              pt.teamID 
      from    goals       g inner join player_team pt on g.playerId = pt.playerId 
      group by pt.teamID
    ) t2 on t.teamid = t2.teamid 
group By pt.teamId,t.city,t2.totalgoals
试试这个:

SELECT a.city '#p' + CONVERT(varchar(10), a.playerCount) + '#g' + CONVERT(varchar(10), b.totalgoals) 
FROM (SELECT t.teamId, t.city, count(pt.playerId) as playerCount
      FROM team t JOIN player_team pt on (t.teamID = pt.teamID)
      GROUP BY t.teamId, t.city)a JOIN 
      (SELECT pt.teamId, count(*) as totalgoals,
      FROM goals g JOIN player_team pt on (g.playerId = pt.playerId) 
      GROUP BY pt.teamId) b ON (a.teamId = b.teamId)

最简单的方法可能是使用相关子查询查找每个团队的值:

SELECT t.city || ' #p' ||
       CONVERT(varchar(10), (SELECT count(*)
                             FROM player_team
                             WHERE teamId = t.teamId))
       || ' #g ' ||
       CONVERT(varchar(10), (SELECT count(*)
                             FROM goals
                             JOIN player_team USING (playerId)
                             WHERE teamId = t.teamId))
FROM team t

Mysql、sql server和splite?这是很多标记。因此,在您更新城市一次之后,当得分更多时,您将怎么做?SQL Server使用
+
来连接,因此我假设OP使用的就是这些标记…谢谢。它对我很有效。select语句为我提供了多个值。那么如何使用这些多个记录更新表?当我尝试将其更新为子查询时,它会给我带来编译错误并抱怨multirecords@Webster--您可以将更新与联接一起使用:。但是,您确定要更新“城市”字段,还是只想使用该数据创建一个新视图。。。