0

ユーザーと結果の 2 つのテーブルがあります。

user_id結果には、users テーブルと同じ列が含まれます。

結果テーブルを取得し、results_value列を合計し、user_idを使用してusersテーブルから追加情報を取得したい....私はこれを思いついた:

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 に答える