【问题标题】:How can I select users based on their reputations in a specific period?如何根据用户在特定时期的声誉来选择用户?
【发布时间】:2017-07-13 20:00:00
【问题描述】:

这是我的表结构:

-- users
+----+--------+--------------------+
| id |  name  | other columns ... 
+----+--------+--------------------+

-- votes
+----+---------+---------+-------+------------+
| id | user_id | post_id | value | date_time  |
+----+---------+---------+-------+------------+
| 1  | 234234  | 3443    | 1     | 1442684886 | -- For example
+----+---------+---------+-------+------------+

我想选择上周排名前 20 的用户。我该怎么做?


这是我当前的查询:

SELECT SUM(v.value) score , u.*
FROM users u 
INNER JOIN votes
ON u.id = v.user_id
WHERE v.date_time >  UNIX_TIMESTAMP(now() - INTERVAL 1 week)
ORDER BY score DESC
LIMIT 20;

但我的查询只返回一行。

【问题讨论】:

标签: mysql sql join sum


【解决方案1】:
Select sum(value) 
FROM users  JOIN votes 
ON u.id = v.user_id 
WHERE v.date_time >  UNIX_TIMESTAMP(now() - INTERVAL 1 week) 
GROUP BY name 
ORDER BY sum(value) DESC
LIMIT 20;

【讨论】:

  • 你为什么不选择users列?
  • 这只是一个工作示例,您可以在 sum(value)、column1、column2 之后添加。或者在 sum(value) 之前 SELECT *, sum(value) FROM ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多