我在MYSQL中处理了以下部分查询。
SELECT
MAX(CAST(MatchPlayerBatting.BatRuns AS SIGNED)) AS HighestScore
FROM
MatchPlayerBatting
返回正确的结果。然而,我还需要另一个专栏来解决这个问题。
即如果它找到的最大值也具有"而不是"在" BatHowOut"中,它应该显示结果,例如96 *而不是96.
怎么可以这样做?
为了使数据具体化,请考虑两种情况:
BatRuns BatHowOut
96 not out
96 lbw
BatRuns BatHowOut
96 not out
102 lbw
对于第一个数据,答案应为'96*'
;对于第二个,'102'
。
答案 0 :(得分:1)
你可以使用像这样的自联接来实现这个目的:
SELECT t1.ID
, CONCAT(t1.BatRuns,
CASE WHEN t1.BatHowOut = 'Not Out' THEN '*' ELSE '' END
) AS HighScore
FROM MatchPlayerBatting t1
JOIN
(
SELECT MAX(BatRuns) AS HighestScore
FROM MatchPlayerBatting
) t2
ON t1.BatRuns = t2.HighestScore
答案 1 :(得分:0)
如何按降序排列乐谱并仅选择第一张唱片?
select concat(BatRuns , case when BatHowOut = 'not out' then '*' else '' end)
from mytable
order by cast(BatRuns as signed) desc,
(case when BatHowOut = 'not out' then 1 else 2 end)
limit 1;
示例here。
如果你想找到每个玩家的最高分数,这里的解决方案可能并不优雅,但效果很好。
select PlayerID,
case when runs != round(runs)
then concat(round(runs),'*')
else
round(runs)
end highest_score
from (select PlayerID,
max(cast(BatRuns as decimal) +
case when BatHowOut = 'not out' then 0.1 else 0 end
) runs
from MatchPlayerBatting
group by PlayerID) max_runs;
这利用了以下事实:运行永远不会是分数,只能是整数。如果得分最高并且其中一个是不败的, 在不败分数中加0.1会使其成为最高分。这可以在以后删除并与*连接。
示例here。