【问题标题】:Mysql count record on condition, multiple fields selectedMysql按条件计数记录,选择多个字段
【发布时间】:2012-09-26 20:12:15
【问题描述】:

如果它们等于一个,我正在尝试使用计数案例来计算某个列(runs.Finish)中的记录。

当我像下面第三行一样添加计数案例时,我似乎无法让它工作。

SELECT
  `jockeys`.`JockeyInitials`,
  `jockeys`.`JockeySurName` ,
  COUNT(  `runs`.`JockeysID` ), 
  COUNT( CASE WHEN `runs`.`Finish`=1 THEN 1 ELSE NULL END ) AS `runs`.`Finish` , 
  SUM(  `runs`.`StakeWon` ) 
FROM runs, jockeys
WHERE  `runs`.`JockeysID` =  `jockeys`.`JockeysID` 
  AND  `runs`.`JockeysID` >=1
  AND  `runs`.`JockeysID` <=100
GROUP BY  `runs`.`JockeysID`

【问题讨论】:

  • 我强烈建议您不要使用FROM runs, jockeys 隐式连接表示法,而是始终使用显式连接表示法,例如FROM runs JOIN jockeys ON runs.JockeysID = jockeys.JockeysID。为了阅读旧式 SQL,您需要了解其他表示法,但请注意不要自己使用它。
  • 您还应该描述所发生的事情,而不是“我似乎无法让它工作”;它以什么方式不起作用?语法错误?结果错误?
  • 这是一个语法错误,很抱歉含糊其辞。感谢您对明确加入的建议。

标签: mysql count case


【解决方案1】:

您的查询应该是(按列检查分组和您的案例语句列的别名)

SELECT
  `jockeys`.`JockeyInitials`,
  `jockeys`.`JockeySurName` ,
  COUNT(  `runs`.`JockeysID` ), 
  COUNT( CASE WHEN `runs`.`Finish`=1 THEN 1 ELSE NULL END ) AS `Finish` , 
  SUM(  `runs`.`StakeWon` ) 
FROM runs, jockeys
WHERE  `runs`.`JockeysID` =  `jockeys`.`JockeysID` 
  AND  `runs`.`JockeysID` >=1
  AND  `runs`.`JockeysID` <=100
GROUP BY  `jockeys`.`JockeyInitials`,
  `jockeys`.`JockeySurName`

【讨论】:

  • 那行得通。根据 Jonathan Leffler 的建议,我将尝试使用显式 JOIN。我知道我不应该说谢谢,但我忍不住,谢谢大家,这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2010-11-15
相关资源
最近更新 更多