MYSQL查看和求和字段

时间:2012-02-12 19:39:48

标签: mysql sql

我需要一些帮助,我一直在网上搜索,但却找不到太相似的东西。我的高尔夫联盟有一个MYSQL数据库。我需要通过从这个数据库创建一个视图来显示排名。每队有2个人,我在'球员'中的主键是'id',对于每个对应队友的球员,还有一个teamID(数值1 - 20,20支球队)。基本上我需要的是一个包含'teamID'的视图,两个玩家'LName'(可能是'LNameA','LNameB'),以及两个玩家'积分'字段的总和。我从来没有从一个人和另一个人那里总结一个字段,或者在MYSQL中创建了一个视图。

编辑:

我正在尝试像

这样的东西
CREATE 
VIEW standings1
AS SELECT teamID, LName, points
FROM players

但是需要teamID作为视图的primaryKey,它将包含每个玩家的姓氏,并且他们的点总和在一起。

2 个答案:

答案 0 :(得分:2)

试试这个:

create view standings as
  select teamId, group_concat(lname separator ', ') as TeamMembers,
    sum(points) TotalPoints from players
  group by teamId

哦,还有一件事。如果你想在不同的领域中拥有玩家的名字(group_concat只用逗号分隔它们,但它仍然只是一个字段)你可以使用这个查询:

create view standings as
  select a.teamId, a.lname as player1, b.lname as player2,
  a.points + b.points TotalPoints
  from players a
  join players b ON a.teamId = b.teamId AND a.id >= b.id
  group by a.teamId, a.id
  having count(*) = 2

通过这种方式,您可以更好地使用PHP中的名称,而无需解析“,”

答案 1 :(得分:1)

如果我了解您的表格结构,那么您需要JOIN针对表格自己的teamID。我假设teamID指团队,而不是玩家的身份。这里的诀窍是在同一teamID上加入表的两个副本,但玩家ID不相等。这应该会产生每队的球员。

CREATE VIEW standings AS
(
SELECT
  p1.teamID AS teamID,
  p1.id AS p1id,
  p2.id AS p2id,
  p1.LName AS p1LName,
  p2.LName AS p2LName,
  p1.score + p2.score AS totalScore
FROM
  /* JOIN on matching teamID and non-matching player-id (so you don't get the same player twice) */
  players p1 JOIN players p2 ON p1.teamID = p2.teamID and p1.id <> p2.id
);