0

約 3 つの MySQL クエリを 1 つに結合したいのですが、複雑なものもあります。(以下は私のテストクエリとテーブルデータの例です)

表 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 で参照されたアカウント文字の合計時間を表示および合計する 2 番目のクエリ:

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

私が欲しいもの:
上記の 2 つのクエリを 2 つ 1 つ組み合わせて、以下のような結果を得たい:
ランク列はアカウントからの文字の最高ランクであり、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 を使用した 2 番目のクエリに問題があると思われるので、今追加します。

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

デモを見る

于 2013-01-15T19:25:38.703 に答える