[英]How to return 0 value in SQL query?
在给定的锦标赛中,每个足球运动员按升序计分进球数(总和)。 对于那些进球数为0的足球运动员,我们应返回值0的足球运动员的名称。要点是,进球数为0的足球运动员也应作为输出的一部分。
Footballer name | Goal | Tournament
Messi | 3 | La liga
Ronaldo | 5 | UEFA
Suarez | 2 | La liga
输出应为“西甲”,输出应为:
Ronaldo 0
Suarez 2
Messi 3
尝试这个
select footballer, sum(goals)
from (
select footballer, CASE
WHEN tournament = 'LA_LIGA' THEN goals
else 0
END
from tableA) AS tabA
group by footballer
希望对您有所帮助。
我不确定您的数据库的结构是什么,我认为通常分数会奖励给团队而不是个人。 无论如何,这只是概念:
表格:
玩家= {玩家ID,姓名,年龄,性别,身高等。}
游戏= {游戏ID,玩家ID,得分...}
锦标赛= {锦标赛ID,游戏ID,锦标赛名称...}
select p.name, IFNULL(g.score,0), t.tournamentName from players p left join Games g on p.playerID = g.playerID left join Tournaments t on g.GameID = t.GameID where t.tournamentName = 'La liga'
解决方案:我的意思是您可能需要使用IFNULL(..)并将默认值设置为0。
尝试这个....
Select FootballerName,
sum(CASE WHEN tournament = 'LA LIGA' THEN Goal else 0 END) as Goal
from #Matches group by FootballerName
想要在所有锦标赛中获得玩家的所有进球
Select FootballerName, sum(Goal) as Goal
from #Matches group by FootballerName
想明智地了解目标
Select FootballerName, sum(Goal) as Goal,Tournament
from #Matches group by FootballerName,Tournament
除非您有3个表(玩家,锦标赛和目标),否则您将需要使用子选择创建3套并将它们连接在一起。 您需要所有比赛和所有足球运动员的交叉产品。
SELECT footballer_name, tournament FROM
(SELECT DISTINCT footballer_name FROM your_table) AS players
JOIN
(SELECT DISTINCT tournament FROM your_table) AS tournaments
以上内容可为您将足球运动员和锦标赛的每对独特配对创造一条记录。 看看是否可以在数据库中使用它,然后最后加入分数以结束它
信息源:数据透视查询可帮助我们生成一个交互式表格,该表格可以快速组合和比较大量数据。 我们可以旋转其行和列以查看源数据的不同摘要,并且可以一目了然显示感兴趣区域的详细信息。 它还有助于我们生成多维报告。
创建表脚本
Create table Matches(FootballerName varchar(100),Goal int ,Tournament varchar(100))
SQL Server插入记录脚本
insert into Matches(FootballerName,Goal,Tournament)
select 'Messi ', 3 ,'La liga' union
select 'Ronaldo ', 5 ,'UEFA' union
select 'Surez ', 2 ,'La liga'
MySQL服务器脚本
Create table Matches(FootballerName varchar(100),Goal int ,Tournament varchar(100));
insert into Matches(FootballerName,Goal,Tournament)
select 'Messi ', 3 ,'La liga' union
select 'Ronaldo ', 5 ,'UEFA' union
select 'Surez ', 2 ,'La liga';
MYSQL版本
Select FootBallerName,
Sum(CASE WHEN Tournament= 'La liga' THEN goal ELSE 0 END) AS 'La liga',
Sum(CASE WHEN Tournament= 'UEFA' THEN goal ELSE 0 END) AS 'UEFA'from Matches
group by FootBallerName order by FootBallerName;
使用Pivot的SQL Server查询---仅适用于[La liga]
SELECT FootballerName,isnull([La liga],0) as'La liga'
FROM (
SELECT
FootballerName ,isnull(goal,0) as'goal',
Tournament
FROM Matches
) as s
PIVOT
(
SUM(goal)
FOR Tournament IN ([La liga],[UEFA])
)AS pvt order by [La liga]
使用Pivot的SQL Server查询---仅[La liga]和[UEFA]
SELECT FootballerName,isnull([La liga],0) as'La liga',isnull([UEFA],0) as'UEFA'
FROM (
SELECT
FootballerName ,isnull(goal,0) as'goal',
Tournament
FROM Matches
) as s
PIVOT
(
SUM(goal)
FOR Tournament IN ([La liga],[UEFA])
)AS pvt order by [La liga],[UEFA]
您可以阅读更多[ https://technet.microsoft.com/zh-cn/library/ms177410(v=sql.105).aspx]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.