2015-03-03 3 views
-1

Мне нужно перенести дату из одной таблицы в другую.Подзапрос MySQL или присоединение

Это таблица источников. Для каждого теста есть 2 канала с 3 рядами на канал.

id value1 value2 testid channel 
1 123  567  789  asd 
2 125  587  789  asd 
3 126  596  789  asd 
4 569  12  789  qwe 
5 567  15  789  qwe 
6 563  19  789  qwe 
7 12  877  963  asd 
8 23  765  963  asd 
9 34  676  963  asd 
10 987  23  963  qwe 
11 876  34  963  qwe 
12 678  12  963  qwe 

в этом

id value1_asd value2_asd value1_qwe value_2_qwe test_id 
1  124.6  583.3  566.3  15.3  789 

Можно ли это сделать в одном запросе? Я могу сделать это несколькими, но это занимает много времени в моей реальной таблице. У меня более 4 миллионов записей.

+1

Здесь я не вижу запросов или таблиц. Если ваш вопрос о MySQL, то разделите HTML, разместите только данные. Также проверьте эту страницу: [ask]. – axiac

ответ

0

я думаю, я нашел решение ...

INSERT INTO table2 (value1_asd,value2_asd,value1_qwe,value_2_qwe,test_id) SELECT T1.v1,T1.v2,T2.v1,T2.v2,T2.testid 
FROM (SELECT AVG(`value1`) as v1, AVG(`value2`) as v2, `channel`, `testid` FROM table1 WHERE `channel` = 'asd' GROUP BY `testid`) AS T1, 
(SELECT AVG(`value1`) as v1, AVG(`value2`) as v2, `channel`, `testid` FROM table1 WHERE `channel` = 'qwe' GROUP BY `testid`) AS T2 
WHERE T1.testid = T2.testid 
GROUP BY T2.testid 

спасибо за ваше решение он дал мне правильную идею. SG

0

Прежде всего, чтобы упростить, сохраните id второго приращения.

Затем вы можете запустить этот запрос,

INSERT INTO table2 (value1_asd,value2_asd,value1_qwe,value_2_qwe,test_id) SELECT AVG(T1.value1),AVG(T1.value2),AVG(T2.value1),AVG(T2.value2),AVG(T3.testid) 
FROM Table1 AS T1,Table1 AS T2,Table1 AS T3 
WHERE T1.channel='asd' AND T2.channel='qwe'; 

The select будет выбрать среднее значение полей. Так как у нас есть 3 сценария здесь

1) канала = 'ASD'
2) канал = 'QWE'
3) TestID

Мы лечащему ту же таблицу 3 различных таблиц (используя псевдоним). Значения, выбранные в select, будут вставлены во вторую таблицу table2.

Надеюсь, это помогло.

+0

Это работает, если в таблице имеется только один набор данных. Но со вторым набором данных с другим testid результатом является беспорядок ... –

+0

Итак, вы имеете в виду, что вам понадобится среднее значение testid, основанное на канале. Итак, вы ожидаете две записи во второй таблице? –

+0

Да, одна запись на яичко –

Смежные вопросы