在 MySQL 中,我有两个表。首先是成员(member)。其次是成员(member)经验。 member_experience 表包含成员(member)获得的所有 XP 的值以及他们获得这些 XP 的原因。我想编写一个查询来选择成员并按他们的 XP 总数对结果进行排序。我编写的查询不会返回任何结果。
CREATE TABLE IF NOT EXISTS `members` ( `member_id` int(15) NOT NULL AUTO_INCREMENT, `group_id` int(15) NOT NULL, `display_name` text NOT NULL, `email_address` text NOT NULL, `password` text NOT NULL, `status` tinyint(1) NOT NULL, `activation_code` varchar(16) NOT NULL, `date_joined` text NOT NULL PRIMARY KEY (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `member_experience` ( `experience_id` int(15) NOT NULL AUTO_INCREMENT, `member_id` int(15) NOT NULL, `value` mediumint(6) NOT NULL, `description` text NOT NULL, `date_earned` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`experience_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是我当前的查询:
SELECT m.member_id, xp.member_id, SUM(xp.value) AS total_xp FROM members AS m LEFT JOIN member_experience AS xp ON (xp.member_id = m.member_id) ORDER BY total_xp";
最佳答案
这将完成这些事情:
SELECT
members.member_id,
total_xp.sum_xp
FROM
members
LEFT JOIN
(SELECT
member_id,
SUM(value) AS sum_xp
FROM
member_experience
GROUP BY
member_id) AS total_xp
ON members.member_id = total_xp.member_id
ORDER BY
total_xp.sum_xp
关于mysql - 如何从一个表中选择行并按另一个表中的列的总和对其进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18481425/