有些朋友拖着我写了一个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表的前三个用户,每个用户将配备一个最高分。当然,这是完全错误的。
如何将用户名输入我的结果集?
答案 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
修改强>
负责任地享受。
干杯。