有没有可能以更好的方式编写这个mysql语句?克莱内尔?更具可读性?更快?
我有两个表,用户和结果 结果包含与用户表相同的列有没有可能以更好的方式编写这个mysql语句?克莱内尔?更具可读性?更快?,mysql,Mysql,我有两个表,用户和结果 结果包含与用户表相同的列user\u id 我想抓取结果表,求结果值列的和,然后使用用户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 B
user\u id
我想抓取结果表,求结果值列的和,然后使用用户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的初学者,我想知道我是否在做一些愚蠢的事情,或者也许它有效,但是有更好(更快)的方法来做同样的事情吗?你的方法实际上很好。可以在不使用
分组方式的情况下编写,这可能更容易理解:
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
您可能会注意到,使用表别名有助于提高查询的可读性。基础看起来不错。主要的是要确保你有合适的索引。此外,还应该在GROUPBY子句中命名所有非聚合列(在MySQL中不是100%必需的,但在其他一些SQL风格中,不这样做可能会导致为这些列返回不确定的值)
您还可以使用更现代的语法进行连接:-
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
为什么要在2点之前下单?这意味着什么?它只是意味着orderby
列号2
在SELECT
列表中-必须以较短的方式编写orderby DESC
在您的情况下只写:ORDER BY rsum不是更容易吗?无论如何,谢谢你的帮助。。。这是我编写sql语句的新风格,而不是我的一行代码:PCan你能帮我提个问题吗:@15256041?根据mysql的版本,使用这样的子选择可能比使用group by慢得多。