首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:计算(并填充?)有序结果的差异

SQL:计算(并填充?)有序结果的差异
EN

Stack Overflow用户
提问于 2014-04-17 18:22:51
回答 1查看 73关注 0票数 1

我正在使用MariaDB (根据我的有限概念,它是MySQL的替代品)来支持一个小的选举应用程序。

我在候选人中存储的一件事是“领先优势”--即他们的多数派是多少。如果候选人A赢得6票,候选人B赢得12票,候选人C赢得7票,则值为0、5、0。

但现在我有了一个新的数据集,我知道投票和投票,但没有“领先优势”。有数以百计的候选人,所以我需要计算这个。这就是我想用英语做的:

  1. 用骑马来分类每个人。
  2. 那就按选票分类。
  3. 减去(第一名候选人的选票-第二名候选人的选票),并将结果存储在第一名的“领先优势”一栏中。
  4. 其他人都得了0。或者干脆让它空着。

下面是一个完整表的示例,以展示我要做的事情。它与实际数据的唯一不同之处在于,我还没有计算出“领先利润率”。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-17 19:10:22

此查询只为获胜者设置领先的页边距。如果将引导页边距的默认值设置为0,或者运行另一个查询将其设置为0,则可以:

代码语言:javascript
复制
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系统:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23140630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档