2012-01-05 29 views
1

同じ構造を持つ2つのテーブルがあります: 'imsc_storage_users' & 'imsc_storage_users_archive'。MySQLは同じスキームテーブルのUNIONの結果を結合します

私の現在のSELECT/UNION:

SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
FROM `imsc_storage_users` 
UNION DISTINCT 
SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
FROM `imsc_storage_users_archive` 
ORDER BY `correct` DESC,`minutes` ASC 

私は、これらの結果を取得しています: '111111111111' は2回出現していること

+--------------+---------------------+-----------+---------+---------+------+---------+ 
| cli   | ts     | questions | answers | correct | last | minutes | 
+--------------+---------------------+-----------+---------+---------+------+---------+ 
| 111111111111 | 2011-12-22 11:13:57 |  30 |  29 |  14 | 30 | 1305.47 | 
| 222222222222 | 2011-12-15 13:39:16 |  26 |  24 |  13 | 24 | 15.67 | 
| 333333333333 | 2011-12-15 13:39:39 |  26 |  25 |  11 | 25 | 15.18 | 
| 444444444444 | 2011-12-15 13:39:39 |  25 |  21 |  11 | 25 | 280.53 | 
| 111111111111 | 2011-12-22 11:13:57 |  25 |  21 |  10 | 25 | 373.87 | 
| 555555555555 | 2011-12-19 15:46:15 |  11 |  10 |  5 | 10 |  3.8 | 
| 666666666666 | 2011-12-15 13:39:16 |  14 |  10 |  4 | 10 | 321.64 | 
| 777777777777 | 2011-12-19 08:34:36 |  15 |  11 |  4 | 13 | 474.66 | 

お知らせ?

私はそれを組み合わせたい、結果セットでは、すべてのフィールドを結合/合計する「111111111111」の1行が得られます。 'questions' = >> 55 ....など '

正しいSQLは何ですか?
ここでパフォーマンスは問題にはなりません。

ありがとうございました!

+1

だから、同じ 'cli'あなたは'? '?MAX'をMIN'、それらを組み合わせるんか?' ts'に対して異なる値を持っているとき、何が起こりますか? – Lamak

答えて

7
SELECT `cli`,max(`ts`) AS ts, sum(`questions`) as questions, sum(`answers`) as answers,sum(`correct`) as correct,sum(`last`) as last,sum(`minutes`) as minutes 
FROM (
    SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
    FROM `imsc_storage_users` 
    UNION ALL 
    SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
    FROM `imsc_storage_users_archive` 
) AS baseview 
GROUP BY cli 
ORDER BY `correct` DESC,`minutes` ASC 
+1

UNION DISTINCTは、おそらく合計値に含める必要がある場合でも、2つのテーブル間の正確な重複を排除することに注意してください。 –

+1

@マーク・バニスターあなたは、鷹の目を持っています!訂正しました。 –

+0

Eugen:Not quite(http://dev.mysql.com/doc/refman/5.0/en/union.html); UNION ALLを試してください。 –

3

試してみてください。

SELECT `cli`, 
     `ts`, 
     sum(`questions`), 
     sum(`answers`), 
     sum(`correct`), 
     sum(`last`), 
     sum(`minutes`) 
FROM (SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
     FROM `imsc_storage_users` 
     UNION ALL 
     SELECT `cli`,`ts`,`questions`, `answers`,`correct`,`last`,`minutes` 
     FROM `imsc_storage_users_archive`) V 
group by `cli`, `ts` 
ORDER BY 5 DESC, 7 ASC 
関連する問題