我正在使用MariaDB (根据我的有限概念,它是MySQL的替代品)来支持一个小的选举应用程序。
我在候选人中存储的一件事是“领先优势”--即他们的多数派是多少。如果候选人A赢得6票,候选人B赢得12票,候选人C赢得7票,则值为0、5、0。
但现在我有了一个新的数据集,我知道投票和投票,但没有“领先优势”。有数以百计的候选人,所以我需要计算这个。这就是我想用英语做的:
下面是一个完整表的示例,以展示我要做的事情。它与实际数据的唯一不同之处在于,我还没有计算出“领先利润率”。
MariaDB [databasename]> SELECT * FROM `demo_candidates` ORDER BY `riding` ASC , `votes` DESC;
+--------+-----------+-----------+---------+-------+-------+---------------+---------+
| id | riding | lname | fname | party | votes | leadingmargin | percent |
+--------+-----------+-----------+---------+-------+-------+---------------+---------+
| 1 | 1 | Redford | Richard | 1 | 92 | 50 | 57.14 |
| 4 | 1 | Pelford | Paul | 4 | 42 | 0 | 26.09 |
| 3 | 1 | Yeltmate | Yoris | 3 | 16 | 0 | 9.94 |
| 2 | 1 | Gint | Ginny | 2 | 11 | 0 | 6.83 |
| 6 | 2 | Gelford | Gippy | 2 | 99 | 16 | 44.59 |
| 5 | 2 | Roberts | Roy | 1 | 83 | 0 | 37.39 |
| 8 | 2 | Peg | Porkay | 4 | 28 | 0 | 12.61 |
| 7 | 2 | Yavin | Yordy | 3 | 12 | 0 | 5.41 |
etc..
+--------+-----------+-----------+---------+-------+-------+---------------+---------+
20 rows in set (0.00 sec)发布于 2014-04-17 19:10:22
此查询只为获胜者设置领先的页边距。如果将引导页边距的默认值设置为0,或者运行另一个查询将其设置为0,则可以:
UPDATE demo_candidates t1
LEFT JOIN demo_candidates t2
ON t2.riding = t1.riding
AND t2.votes > t1.votes
JOIN demo_candidates t3
ON t3.riding = t1.riding
AND t3.votes < t1.votes
LEFT JOIN demo_candidates t4
ON t4.riding = t3.riding
AND t4.id <> t1.id
AND t4.votes > t3.votes
SET t1.leadingmargin = t1.votes - t3.votes
WHERE t2.id IS NULL AND t4.id IS NULL如果胜利者平局,或者只有一个候选人,领先优势将不会被设定。
更新:
这款手机也设置了0系统:
UPDATE demo_candidates t1
LEFT JOIN demo_candidates t2
ON t2.riding = t1.riding
AND t2.votes > t1.votes
LEFT JOIN demo_candidates t3
ON t3.riding = t1.riding
AND t3.votes < t1.votes
LEFT JOIN demo_candidates t4
ON t4.riding = t3.riding
AND t4.id <> t1.id
AND t4.votes > t3.votes
SET t1.leadingmargin = IF(t2.id IS NULL AND t4.id IS NULL, t1.votes - t3.votes, 0)https://stackoverflow.com/questions/23140630
复制相似问题