【问题标题】:how to select and group mysql data based on the following table如何根据下表选择和分组mysql数据
【发布时间】:2013-11-21 21:05:17
【问题描述】:

如果我的表看起来像这样,如何在 mysql 中达到预期的结果。

结果|年份

1 |2011

2 |2011

1 |2011

0 |2011

1 |2012

2 |2012

1 = 赢,2 = 输,0 = 平

每年都可以有多个这样的值。不知道如何才能获得如下所需的结果。

year  won  lost  draw  totalPlayed
2011  2     1     1       3
2012  1     1     0       2

我尝试了以下查询,但没有得到想要的结果

select year,
league_types.league_name, 
sum(if(result = 1,1,0)) as won,
sum(if(result = 0,1,0)) as draw,
sum(if(result = 4,1,0)) as noResult,
sum(if(result = 2,1,0)) as lost, 
sum(if(result = 3,1,0)) as tied, 
sum(if(result > 0 and result < 4,1,0)) as played 
from match_score_card 
inner join fixtures on match_score_card.match_id = fixtures.match_id
inner join league_types on fixtures.league_id = league_types.league_id
where 
team_id = 1 group by year order by year desc

【问题讨论】:

  • 您必须按年份分组,league_types.league_name 使用 agg 函数(例如 sum())
  • 也试过了,但没用。

标签: mysql select group-by sum case


【解决方案1】:

这是演示以下查询的SQL Fiddle

SELECT m.year,
  SUM(CASE WHEN m.result = 1 THEN 1 ELSE 0 END) AS 'Won',
  SUM(CASE WHEN m.result = 2 THEN 1 ELSE 0 END) AS 'Lost',
  SUM(CASE WHEN m.result = 0 THEN 1 ELSE 0 END) AS 'Draw',
  COUNT(*) AS 'TotalPlayed'
FROM MyTable AS m
GROUP BY m.year

【讨论】:

  • 它可以工作,但是一旦我添加了内部连接以从不同的表中检索有关联赛的其他信息,它就会再次执行相同的操作。没有给出正确的值。
  • 这里的问题是每年可以有不同的联赛类型。例如 2011 年可以有“联赛 1”和“联赛 2”。联赛表看起来像这样的 League_id , League_name。
  • 在您的问题中,您声明“我怎样才能获得如下所示的所需结果”。然后,您将显示一个与我链接的 SQL Fiddle 中生成的表完全相同的表。现在你想要一些不同的东西吗?您能否更改您的问题以显示您正在寻找的结果?
【解决方案2】:

我不熟悉 mySQL 中的 IF 函数,但是这个标准 SQL 应该可以工作:

select year
     , league_types.league_name 
     , sum(CASE WHEN result = 1 THEN 1 ELSE 0 END) as won
     , sum(CASE WHEN result = 2 THEN 1 ELSE 0 END) as lost
     , sum(CASE WHEN result = 3 THEN 1 ELSE 0 END) as draw
     , sum(CASE WHEN result = 4 THEN 1 ELSE 0 END) as noResult
     , sum(CASE WHEN result = 1
                  or result = 2 THEN 1 ELSE 0 END) as played
from match_score_card 
inner join fixtures 
on match_score_card.match_id = fixtures.match_id
inner join league_types 
on fixtures.league_id = league_types.league_id
where team_id = 1 
group by year, league_types.league_name
order by year desc, league_types.league_name

我猜你只想把输赢算作“玩过”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 2015-05-19
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多