Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 计算满足条件的行数_Mysql_View - Fatal编程技术网

Mysql 计算满足条件的行数

Mysql 计算满足条件的行数,mysql,view,Mysql,View,我真的认为我的问题不太具体,我只是不知道如何解释 假设我有一张桌子,上面有以下几张桌子 团队|游戏类型|日期|结果 我想创建一个视图,列出一些关于团队的统计信息 选择团队,按团队顺序按总描述从匹配中计算(*) 现在我想添加计算总数的列 哪些是联赛 在过去的一个月里 获胜 损失 领带 其目的是在数据库中创建视图,而不是创建任何新的表或列。您可以在聚合函数中使用case语句来仅聚合特定事件 SELECT team, count(*) total_matches, co

我真的认为我的问题不太具体,我只是不知道如何解释

假设我有一张桌子,上面有以下几张桌子

团队|游戏类型|日期|结果

我想创建一个视图,列出一些关于团队的统计信息

选择团队,按团队顺序按总描述从匹配中计算(*)

现在我想添加计算总数的列

  • 哪些是联赛
  • 在过去的一个月里
  • 获胜
  • 损失
  • 领带

其目的是在数据库中创建视图,而不是创建任何新的表或列。

您可以在聚合函数中使用case语句来仅聚合特定事件

SELECT 
    team, 
    count(*) total_matches,
    count(case when gameType = 'league' then 1 end) league_matches,
    count(case then date > now() - INTERVAL 30 DAY then 1 end) recent_matches,
    ...
FROM matches 
GROUP BY team

总体思路是在聚合中使用用例表达式

SELECT
    team,
    count(*) as total,
    count(CASE WHEN outcome = 'WIN' THEN 1 END) as wins,
    count(CASE WHEN outcome = 'DRAW' THEN 1 END) as draw,
    count(CASE WHEN outcome = 'LOSE' THEN 1 END) as losses,
    count(CASE WHEN gametype = 'League' THEN 1 END) as leaguegames,
    count(CASE WHEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) < dateTHEN 1 END) as lastmonth
FROM matches
GROUP BY team 
ORDER BY total DESC
选择
团队
将(*)算作总数,
将(当结果为“赢”时,则为1结束)计算为赢,
计数(当结果为'DRAW'然后为1 END时的情况)为DRAW,
将(当结果为“损失”时,则为1结束)计算为损失,
将(游戏类型为“联盟”时的情况)计算为联盟游戏,
将(日期(CURDATE(),间隔1个月)
比用例更简单,可读性更强(至少对我而言),或者:

SELECT
   team,
   count(*) as total,
   count(outcome = 'WIN'  OR NULL) as wins,
   count(outcome = 'DRAW' OR NULL) as draw,
   ...
FROM matches
GROUP BY team
@Konerak:没有。缺少“ELSE”条件时忽略计数(NULL)