0

我想将大约 3 个 MySQL 查询合并为一个,但有些复杂。(以下是我的测试查询和表数据示例)

表 1:账户

id  |   account | email  | refer
11  |   aasdasd | 5@as.a | 0
12  |   gasd    | 4@ds.a | 11
13  |   xcsxs   | 3@ss.a | 11
14  |   cbasd   | 2@as.a | 11
15  |   asdv    | 1@gs.a | 11
16  |   sdfgx   | 6@hs.a | 8

...

表2:字符

guid    |account| name | rank   | time
561     |   11  | asda | 945    | 12
562     |   11  | asda | 746    | 19
563     |   11  | asda | 452    | 1
564     |   12  | asda | 123    | 15
565     |   12  | asda | 456    | 18
566     |   13  | asda | 123    | 6
567     |   13  | asda | 789    | 18
568     |   13  | asda | 123    | 17
569     |   15  | asda | 456    | 13
570     |   16  | asda | 123    | 15
571     |   17  | asda | 456    | 16

...
我的测试查询

 SELECT id FROM accounts WHERE refer='11'

识别帐户是使用值 '11' 和第二个查询来显示和汇总帐户字符的总时间,其中有参考值 11 :

SELECT a.account, a.email, SUM(c.time) , c.rank
FROM accounts a, characters c
WHERE a.id=c.account
ORDER BY MAX(c.rank) DESC

我想要什么:
我想将上述两个查询组合在一起,并得到如下结果:
rank 列是帐户中字符的最高等级,totaltime 是该帐户所有字符时间的总和

Account | Email | Rank | TotalTime
gasd    |4@ds.a | 456  | 33
xcsxs   |3@ss.a | 789  | 41
cbasd   |2@as.a |  0   | 0
asdv    |1@gs.a | 456  | 13

我认为 SUM 的第二个查询有问题,我现在添加它。

4

1 回答 1

1

试试这个

    SELECT a.account, a.email,  c.rank,SUM(c.time) totaltime
    FROM accounts a
    INNER JOIN characters c
    ON a.id = c.account

    WHERE a.refer=11
    ORDER BY MAX(c.rank) DESC

编辑 :

   SELECT a.account, a.email,  MAX(c.rank) rank,SUM(c.time) totaltime
    FROM accounts a
     left JOIN characters c
    ON a.id = c.account

    WHERE a.refer=11
  group by a.account
   ORDER BY MAX(c.rank) DESC

看演示 SQLFIDDLE

于 2013-01-15T19:25:38.703 回答