mysql - 如何从一个表中选择行并按另一个表中的列的总和对其进行排序?

标签 mysql join sum

在 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/

相关文章:

mysql - 从具有相同列名的不同表中选择/连接多个字段

php - 添加条件并连接到 laravel 中的连接表

mysql左连接仅选择左表中最高的

python - 类型错误 : unsupported operand type(s) for + when using sum

r - 当数据框包含日期格式时,为什么按列应用求和并且 colSums 不同?

sql-server - 与 SQL Server RollUP 求和 - 但只是最后的总结?

mysql - 如何记录特定数据库的mysql慢查询

mysql - JBOSS 7 MYSQL 缺少依赖项错误

mysql - 如何在mysql中使用INNER JOIN从两个表中删除行?

mysql - SQL 获取所有只包含一种商品的订单