首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值为1的地方

数值为1的地方
EN

Stack Overflow用户
提问于 2017-04-03 11:48:16
回答 3查看 70关注 0票数 2

我得到了这个选择。我想数(或数?)黄牌和红牌(只在YellowCard = 1处计算黄牌,在RedCard =1时才算红牌)。此选择不能正确工作。它计数卡,即使有0或空..。我怎样才能改正呢?

代码语言:javascript
复制
SELECT Firstname, Lastname, COUNT(YellowCard) AS Yellow, COUNT(RedCard) AS Red, Team.Name 
FROM PlayerMatch 
Inner join Player On PlayerMatch.PlayerId = Player.PlayerId 
INNER JOIN Team ON Player.TeamId = Team.TeamId 
INNER JOIN Match ON PlayerMatch.MatchId = Match.MatchId 
WHERE(YellowCard = 1 OR RedCard = 1) 
GROUP BY Lastname, Firstname, Name 
ORDER BY Yellow DESC
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-03 11:51:30

使用SUM()而不是COUNT()

代码语言:javascript
复制
SELECT Firstname, Lastname,
       SUM(YellowCard) AS Yellow, SUM(RedCard) AS Red, t.Name 
FROM PlayerMatch pm Inner join
     Player p
     On pm.PlayerId = p.PlayerId INNER JOIN
     Team t
     ON p.TeamId = t.TeamId INNER JOIN
     Match m
     ON pm.MatchId = m.MatchId 
WHERE (YellowCard = 1 OR RedCard = 1) 
GROUP BY Lastname, Firstname, Name
ORDER BY Yellow DESC;

这假设YellowCardRedCard的值总是0或1(或NULL)。这似乎是一个合理的假设。

如果情况并非如此,则使用CASE

代码语言:javascript
复制
SELECT Firstname, Lastname,
       SUM(CASE WHEN YellowCard = 1 THEN 1 ELSE 0 END) AS Yellow,
       SUM(CASE WHEN RedCard = 1 THEN 1 ELSE 0 END) AS Red,
       t.Name 
票数 7
EN

Stack Overflow用户

发布于 2017-04-03 12:02:23

不,NULL不算在内。如果是YellowCardRedCard只使用0,1,NULL值:

代码语言:javascript
复制
SELECT Firstname, Lastname, COUNT(nullif(YellowCard,0)) AS Yellow, COUNT(nullif(RedCard,0)) AS Red, Team.Name 
FROM PlayerMatch 
Inner join Player On PlayerMatch.PlayerId = Player.PlayerId 
INNER JOIN Team ON Player.TeamId = Team.TeamId 
INNER JOIN Match ON PlayerMatch.MatchId = Match.MatchId 
WHERE(YellowCard = 1 OR RedCard = 1) 
GROUP BY Lastname, Firstname, Name 
ORDER BY Yellow DESC
票数 2
EN

Stack Overflow用户

发布于 2017-04-03 11:56:22

您不能这样做,因为在SQL中,它将从group & where子句开始,因此您的别名还不存在。

您必须使用SQL子查询作为本教程:http://www.dofactory.com/sql/subquery

如果您尝试:从PlayerMatch内部联接选择*.其中YellowCard in (从yourTable选择* YellowCard = 1)和RedCard in (从yourTable选择* RedCard =1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43183857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档