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;