将另一个表中的值添加到我的结果集中(例如,查找user_id的用户名)

时间:2013-07-02 12:41:53

标签: sql sqlite

有些朋友拖着我写了一个IRC机器人,它有助于全天监控液体的消耗。我们频道中的每个用户每次喝酒时都可以提交一定数量的升,并且该值将存储在drink_today表中,该表在当天结束时重置。机器人使用SQLite进行数据存储。

我坚持使用仅限SQL的方法来找出当天排名前三的饮用者。

我有以下数据库表:

CREATE TABLE users(user_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, active_days INTEGER DEFAULT 0, drinks_total FLOAT DEFAULT 0); 
CREATE TABLE drinks_today(user_id INTEGER, amount FLOAT, timestamp INTEGER, FOREIGN KEY(user_id) REFERENCES users(user_id));

我可以按如下方式找到前3个user_ids:

SELECT user_id,drinks_sum FROM ( SELECT SUM(amount) AS drinks_sum,user_id FROM drinks_today GROUP BY user_id ) ORDER BY drinks_sum DESC LIMIT 3;

结果将是:

1|9.0
4|8.5
3|6.0

现在我正在寻找一种方法(正确地)将用户名映射到结果集中。我尝试了以下声明,但结果不正确:

SELECT u.name,drinks_sum FROM ( SELECT SUM(d.amount) AS drinks_sum FROM drinks_today d GROUP BY d.user_id) JOIN users AS u ON u.user_id=user_id ORDER BY drinks_sum DESC LIMIT 3;

结果集将包含users表的前三个用户,每个用户将配备一个最高分。当然,这是完全错误的。

如何将用户名输入我的结果集?

1 个答案:

答案 0 :(得分:2)

认为你可以一起做到这一点。

SELECT u.user_id, u.name, SUM(d.amount) as drunk
FROM users u
INNER JOIN drinks_today dt ON dt.user_id = u.user_id
GROUP BY u.user_id, u.name
ORDER by drunk DESC -- or maybe ORDER BY SUM(d.amount) DESC
LIMIT 3

修改

负责任地享受。

干杯。