我在MySQL查询中遇到问题,任何帮助都是好的。
基本上,我正在做的项目是记录和显示高尔夫成绩。我有一个查询,可以得到所有球员上午的分数和下午的分数,并将它们相加,在顶部显示最低分数。
我有一个额外的优先级字段,用于检查两场比赛是否在同一分数上,我可以指定一个数字将它们显示在另一场比赛之上。所有这些都很好,我的问题是,如果一名球员只在上午或下午比赛,他们会被显示在顶部,因为他们的得分最低。我需要添加一些东西来检查他们是否在上午和下午都打过比赛,如果没有,那么他们会排在名单的最后。希望这是有道理的。
我的数据库字段是
player_id,
player_name,
player_morning_score,
player_afternoon_score,
player_priority,
player_no_return
我希望在player_no_rereturn中加一个1,然后我的查询会检查这一点,并将它们移到结果的底部。但我不知道该怎么做。
这是我对当前显示它们的查询
SELECT player_id, player_name, (player_morning_score + player_afternoon_score) AS total
FROM players
ORDER BY 'total,player_priority', 'ASC','player_afternoon_score', 'DESC'
目前我的结果看起来像这个
Craig 10
Steve 15
Julie 21
Alex 21
Bob 25
克雷格只打了一上午的比赛,所以需要换到垫底位置。
您是按字符串排序的,这意味着您不是在排序,对列/别名使用反引号:`而不是表示字符串的单引号。尽管你甚至不需要它们(它们用于超过1个单词的别名或保留单词):
SELECT player_id, player_name,
player_morning_score + player_afternoon_score AS total
FROM players
ORDER BY CASE WHEN player_afternoon_score > 0 AND player_morning_score > 0 THEN 1 ELSE 0 END DESC,
`total`,player_priority,player_afternoon_score DESC
ORDER BY
默认为ASC
,所以您不必写下来,只有当您想要DESC
时。
我在ORDER BY
子句中使用了CASE EXPRESSION
添加了你的要求(如果他两个都不打,他将在列表的底部)。
如果玩家在早上玩或没有放置1或0值,您可以选择列。然后按此字段和总排序