簡體   English   中英

如何在SQL查詢中返回0值?

[英]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

希望對您有所幫助。

我不確定您的數據庫的結構是什么,我認為通常分數會獎勵給團隊而不是個人。 無論如何,這只是概念:

表格:

  1. 玩家= {玩家ID,姓名,年齡,性別,身高等。}

  2. 游戲= {游戲ID,玩家ID,得分...}

  3. 錦標賽= {錦標賽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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM