Mysql 在这种情况下,我是否使用命令“sum”?

Mysql 在这种情况下,我是否使用命令“sum”?,mysql,Mysql,我想从表中选择一场足球比赛的结果,将主队得分与客队得分进行比较,然后一起计算,如下所示: SELECT count(id) as Win FROM score where hometeamscore > awayteamscore; SELECT count(id) as Loss FROM score where hometeamscore < awayteamscore; SELECT count(id) as Drow FROM score where hometeamsc

我想从表中选择一场足球比赛的结果,将主队得分与客队得分进行比较,然后一起计算,如下所示:

SELECT count(id) as Win FROM score where hometeamscore > awayteamscore;

SELECT count(id) as Loss FROM score where hometeamscore < awayteamscore;

SELECT count(id) as Drow FROM score where hometeamscore = awayteamscore;
如果主队得分>客队得分=获胜
如果未提供有问题的表结构,但根据您给定的详细信息,您的表可能如下所示

CREATE TABLE score (
    id INT AUTO_INCREMENT,
    hometeamscore TINYINT,
    awayteamscore TINYINT,
    PRIMARY KEY (id)
)  ENGINE=INNODB;



INSERT score (hometeamscore,awayteamscore) values 
(3,0),(2,0),(1,1),(1,5);
您需要使用3个saperate查询分别获得Win、Loss和Drow结果,如下所示:

SELECT count(id) as Win FROM score where hometeamscore > awayteamscore;

SELECT count(id) as Loss FROM score where hometeamscore < awayteamscore;

SELECT count(id) as Drow FROM score where hometeamscore = awayteamscore;

结果不能通过一个查询获得,但我们可以使用mysql的UNION来获得它。您可以得到如下结果:-

SELECT CONCAT('Win:- ', count(id)) as result FROM `scores` WHERE `hometeamscore` > `awayteamscore`
UNION
SELECT CONCAT('Draw:- ',count(id)) as result FROM `scores` WHERE `hometeamscore` = `awayteamscore`
UNION
SELECT CONCAT('Loss:- ',count(id)) as result FROM `scores` WHERE `hometeamscore` < `awayteamscore`
这还将:

SELECT Result,COUNT(*) AS 'Total' FROM
     (SELECT 
            CASE WHEN hometeamscore > awayteamscore THEN 'Win'
            WHEN hometeamscore = awayteamscore THEN 'Draw'
            WHEN hometeamscore < awayteamscore THEN 'Loss' 
                 END AS Result
     FROM score) v 
GROUP BY result;

是的,如果希望所有结果都以串联格式显示一次,那么这就是答案。使用并集合并结果。是的,这一个也可以,但很可能是最慢的一个。。由于group by位于一个计算列上,该列永远无法编制索引。。因此group by需要扫描并处理此查询中的所有表/子查询结果集记录..谢谢@RaymondNijland。我会注意到:
SELECT Result,COUNT(*) AS 'Total' FROM
     (SELECT 
            CASE WHEN hometeamscore > awayteamscore THEN 'Win'
            WHEN hometeamscore = awayteamscore THEN 'Draw'
            WHEN hometeamscore < awayteamscore THEN 'Loss' 
                 END AS Result
     FROM score) v 
GROUP BY result;