gpt4 book ai didi

mysql - SQL SUM 前 5 个值然后 JOIN 结果

转载 作者:行者123 更新时间:2023-11-29 08:31:19 25 4
gpt4 key购买 nike

我想返回投票最多的前 5 个项目,按投票数排序。我认为最好的方法是将每行的 votes_upvotes_down 相加,然后取出其中的前 5 个并将其与另一个表连接起来。

这是我现有的表,Items.ID 映射到 Votes.item_ID:

Items
+----+--------+---------+
| ID | name | site_ID |
+----+--------+---------+
| 10 | box | 111 |
| 11 | hammer | 222 |
| 12 | drill | 333 |
| 13 | nail | 444 |
+----+--------+---------+

Votes
+----+---------+----------+------------+
| ID | item_ID | votes_up | votes_down |
+----+---------+----------+------------+
| 1 | 10 | 25 | 20 |
| 2 | 11 | 200 | 100 |
| 3 | 12 | 100 | 50 |
| 4 | 13 | 50 | 20 |
+----+---------+----------+------------+

这些是我想要返回的结果:

+--------+-------+
| name | votes |
+--------+-------+
| hammer | 100 |
| drill | 50 |
| nail | 30 |
| box | 5 |
+--------+-------+

最佳答案

SELECT   Items.name, votes_up-votes_down AS votes_num
FROM Items, Votes
WHERE Items.id = Votes.item_id
ORDER BY votes_num DESC
LIMIT 5;

数据库首先进行JOIN,然后LIMIT,否则很可能会丢失元组。如果您使用的是 MySQL 或 PostgreSQL,则可以使用 EXPLAIN SELECT ... 语句来验证这一点。如果你想先做top 5,你必须手动做:

SELECT I.name, V.votes_num AS votes_num
FROM Items I,
(SELECT item_ID, votes_up-votes_down AS votes_num
FROM Votes ORDER BY votes_num DESC LIMIT 5) V
WHERE I.ID = V.item_ID
ORDER BY votes_num DESC;

看看这个 demo ;它会返回您想要的结果。

NAME    VOTES_NUM
hammer 100
drill 50
nail 30
box 5

关于mysql - SQL SUM 前 5 个值然后 JOIN 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com