将另一个表中的值添加到我的结果集中(例如,查找 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 的用户名)的主要内容,如果未能解决你的问题,请参考以下文章

计算表中的 2 列并将结果作为同一表中的其他列插入

可以将另一个表作为表中的一行引用吗?

如何将另一个组件的输出值绑定到我的组件中的表单控件

将另一个表中的选定列插入表中[重复]

如何在sql表中查找缺失的元素

使用 AJAX/PHP 将另一个站点表中的内容插入我的表单?