根据在MySQL中有联系的百分比颁发奖品
我试图编写一些sql语句,根据一个位置分配一个值,每个位置都会得到一个总数字变量的某个百分比。可能存在位置关系。若存在平局,例如第四位有一个三方平局,则所有三个条目都会收到第三、第四和第五位合计的相等百分比。所以我需要计算这些结中每个位置的值,然后平均分割。然后,下一个位置将获得第6位,并重复此操作,直到到达最后一个位置根据在MySQL中有联系的百分比颁发奖品,mysql,Mysql,我试图编写一些sql语句,根据一个位置分配一个值,每个位置都会得到一个总数字变量的某个百分比。可能存在位置关系。若存在平局,例如第四位有一个三方平局,则所有三个条目都会收到第三、第四和第五位合计的相等百分比。所以我需要计算这些结中每个位置的值,然后平均分割。然后,下一个位置将获得第6位,并重复此操作,直到到达最后一个位置 我已经有了一个排名函数,我只需要整理一下赋值。总分布有一个固定的数量,我有一个表存储每个位置的所有值。我该如何用pro语法实现这一点,最好是结合php和mysql。非常感谢您的
我已经有了一个排名函数,我只需要整理一下赋值。总分布有一个固定的数量,我有一个表存储每个位置的所有值。我该如何用pro语法实现这一点,最好是结合php和mysql。非常感谢您的帮助。mysql不提供窗口功能,所以这会很麻烦
CREATE TABLE scores (score real);
CREATE TABLE prizes (prize real); /* in any order but assumed distinct, minor changes otherwise */
CREATE VIEW ranked_scores AS
SELECT s.score,
1+COUNT(s2.score > s.score) AS best_place,
-1+COUNT(s2.score=s.score) AS n_tied_with
FROM score s JOIN score s2 ON s2.score>=s.score;
/* if prizes can be the same we need something more like the view above */
CREATE VIEW ranked_prizes AS
SELECT p.prize, COUNT(p2.prize) AS prize_rank
FROM prize p JOIN prize p2 ON p.prize<=p2.prize;
/* there are more efficient ways of getting those ranks except I don't know
* MySQL syntax for getting a pseudo-table 1..n, and windowing functions
* are not available IFAIK.*/
SELECT score, avg(prize) FROM ranked_scores JOIN ranked_prizes
ON prize_rank between best_place and best_place+n_tied_with;
你能把所有关于奖品和奖金的东西都抽象出来吗?我们不知道这在您的应用程序中意味着什么,这可能与手头的问题无关。它真的必须在SQL中吗?对于SQL来说,这似乎相当复杂,但几乎可以用任何语言编写。非常感谢,到目前为止,我已经重新编写了一点,希望能更好。我还将语言要求改为偏好,但不是要求。