0

我有两个表,用户和结果。

结果包含user_id与用户表相同的列。

我想获取结果表,求和 results_value 列,然后使用 user_id 从用户表中获取其他信息....我想出了这个:

SELECT results.user_id, SUM(results.result_value), users.user_name, users.user_pic, users.user_level 
FROM results, users 
WHERE users.user_id = results.user_id 
GROUP BY results.user_id 
ORDER BY SUM(results.result_value) DESC
LIMIT 4

它确实有效,但作为一个完整的 mysql 初学者,我想知道我是否在做一些愚蠢的事情,或者它可能有效但有更好的方法(更快)做同样的事情?

4

2 回答 2

0

你的方法其实很好。不用 也可以写GROUP BY,可能更容易理解:

SELECT
    u.user_id,
    (   SELECT sum(r.result_value)
        FROM results r
        WHERE r.user_id = u.user_id
    ) AS rsum,
    u.user_name,
    u.user_pic,
    u.user_level
FROM users u
ORDER BY 2 DESC
LIMIT 4

您可能会注意到,使用表别名有助于提高查询的可读性。

于 2013-03-07T09:16:22.980 回答
0

基本款看起来不错。主要是确保你有合适的索引。此外,您应该拥有在 GROUP BY 子句中命名的所有非聚合列(在 MySQL 中不是 100% 必需的,但在其他一些 SQL 风格中,不这样做会导致为这些列返回不确定的值)。

您还可以使用更现代的语法进行 JOIN:-

SELECT results.user_id, SUM(results.result_value) AS Asum, users.user_name, users.user_pic, users.user_level 
FROM results
INNER JOIN users 
ON users.user_id = results.user_id 
GROUP BY results.user_id, users.user_name, users.user_pic, users.user_level 
ORDER BY Asum DESC
LIMIT 4
于 2013-03-07T09:17:14.573 回答