将另一个表中的值添加到我的结果集中(例如,查找 user_id 的用户名)
Posted
技术标签:
【中文标题】将另一个表中的值添加到我的结果集中(例如,查找 user_id 的用户名)【英文标题】:Add value from another table to my resultset (e.g. find username for user_id) 【发布时间】:2013-06-29 20:11:21 【问题描述】:一些朋友拉我写了一个 IRC 机器人来帮助监控全天的液体消耗。我们频道中的每个用户每次喝东西时都可以提交一个以升为单位的金额,该值将存储在drinks_today 表中,该表在一天结束时重置。该机器人使用 SQLite 进行数据存储。
我坚持使用仅 SQL 的方式来找出当天排名前 3 位的饮酒者。
我有以下数据库表:
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_id 如下:
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】:认为您可以一次性完成所有操作。
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
编辑
负责任地享受。
干杯。
【讨论】:
嗨拉斐尔!这需要蛋糕!我只是编辑了一点如下: SELECT u.name, SUM(dt.amount) asdrink FROM users u INNER JOIN Drinks_today dt ON dt.user_id = u.user_id GROUP BY u.user_id, u.name ORDER BYdrink DESC限制 3;以上是关于将另一个表中的值添加到我的结果集中(例如,查找 user_id 的用户名)的主要内容,如果未能解决你的问题,请参考以下文章