你需要分解你想要什么。
第一步:你想得到前3的分数。
SELECT nright
FROM jackpot
ORDER BY nright DESC
LIMIT 3
第2步:用户ID谁得到这3个先得
SELECT j.uid
FROM jackpot j
INNER JOIN (
SELECT nright
FROM jackpot
ORDER BY nright DESC
LIMIT 3) AS t ON t.nright = j.nright
第三步:点总量
SELECT COUNT(uid)*20 AS lot FROM jackpot
第四步:等级和人数
这里我们需要使用一个变量,就像你在php中一样,你不能使用set @var:= X;
,所以诀窍就是做一个Select @var:= X
,这个变量由于聚合函数而不起作用。所以,你需要这样做:
SELECT @rank := @rank+1 as rank,T1.nright,T1.nb,T1.lot
FROM(
SELECT nright,
COUNT(uid) as nb,
(SELECT COUNT(uid)*20 FROM jackpot) as lot
FROM jackpot
GROUP BY nright
ORDER BY nright DESC
LIMIT 3
)T1, (SELECT @rank:= 0) r
5步:该地段分布
SELECT j.uid,
CASE
WHEN t.rank = 1 THEN (t.lot*0.7)/t.nb
WHEN t.rank = 2 THEN (t.lot*0.2)/t.nb
WHEN t.rank = 3 THEN (t.lot*0.1)/t.nb
END as lot
FROM jackpot j
INNER JOIN
(SELECT @rank := @rank+1 as rank,T1.nright,T1.nb,T1.lot
FROM(
SELECT nright,
COUNT(uid) as nb,
(SELECT COUNT(uid)*20 FROM jackpot) as lot
FROM jackpot
GROUP BY nright
ORDER BY nright DESC
LIMIT 3
)T1, (SELECT @rank:= 0) r) t ON t.nright = j.nright
如果您发布的SQL的DML和DDL和如果你做的这将是非常非常有帮助[SQL小提琴](http://sqlfiddle.com) –