【问题标题】:Count SQL records from different columns计算来自不同列的 SQL 记录
【发布时间】:2020-10-25 04:06:51
【问题描述】:

我正在开发一个投票/竞赛系统(PHP 和 SQL),用户需要在该系统中选择他们最喜欢的 5 个候选人。他们最喜欢的一号得到 5 分,他们最喜欢的二号得到 4 分,以此类推。

投票示例:

C = 候选人

C_3 5分 C_1 4 分 C_5 3分 C_2 2 分 C_4 1分

所有投票都将存储在 MySQL 表中,如 sow:

ID 5_POINTS 4_POINTS 3_POINTS 2_POINTS 1_POINTS 1 C_4 C_2 C_1 C_5 C_3 2 C_5 C_3 C_2 C_4 C_1 3 C_4 C_1 C_3 C_5 C_2 4 C_1 C_4 C_2 C_3 C_5

以上投票的排名应该是:

1. 候选人 4 - 16 分 2. 候选人 1 - 13 分 3. 候选人 2 - 11 分 4. 候选人 3+5 - 10 分

如何获得像上面这样的查询输出? 我尝试了多种东西,但没有任何效果。如果有人能指出我正确的方向,那就太好了......

【问题讨论】:

  • 说到候选人,这是一个将database normalization 转换为更易于使用的关系形式的候选人。
  • 我会更改表格的架构,将候选人和用户置于投票/给分关系中。 IE。该表有三列,用户 ID、候选人 ID 和点数。那么你的问题可以通过一个简单的聚合来解决。

标签: mysql sql count counting points


【解决方案1】:

您可以按以下格式保存记录

ID CANDIDATE POINTS
1 C_4 5
2 C_2 4
3 C_1 3
4 C_5 2
5 C_3 1
6 C_5 5
7 C_3 4
8 C_2 3
9 C_4 2
10 C_1 1
11 C_4 5
12 C_1 4
13 C_3 3
14 C_5 2
15 C_2 1
16 C_1 5
17 C_4 4
18 C_2 3
19 C_3 2
20 C_5 1

这样,您可以通过总结他们的积分来获得排名靠前的人,例如SELECT sum(Points) from tablename

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2021-12-11
    相关资源
    最近更新 更多