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

时间:2013-08-28 07:09:25

标签: mysql join sum

在MySQL中,我有两个表。首先是成员。其次是member_experience。 member_experience表包含成员获得的所有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";

2 个答案:

答案 0 :(得分:0)

这将做的事情:

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

答案 1 :(得分:0)

试试这个:

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
GROUP BY 
   m.member_id
ORDER BY 
   SUM(xp.value)
相关问题