Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединение таблиц / 13 сообщений из 13, страница 1 из 1
18.09.2014, 21:30:57
    #38750974
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Всем доброго времени суток!
Мне нужно объединить две таблицы: в первой содержится столбец adnest_id, во второй тот же самый adnest_id + unioun_adnest_id.
Так получается, что некоторые сущности можно объединять в некоторые классы (unioun_adnest_id).

Вот первая таблица (таблица tab) (содержащая adnest_id и некоторую информацию):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+-------+-------+--------+---------+-----------+
| adnest_id | 1-10  | 11-50 | 51-100 | 101-500 | 501-10000 |
+-----------+-------+-------+--------+---------+-----------+
|      1370 |    31 |     3 |      0 |       0 |         0 |
|       368 | 22916 |   395 |      0 |       0 |         0 |
|       149 | 42638 |  4600 |      0 |       0 |         0 |
|      1343 | 21309 |   496 |      0 |       0 |         0 |
|       369 |   109 |     0 |      0 |       0 |         0 |
+-----------+-------+-------+--------+---------+-----------+



А вот вторая (таблица map), которая содержит информацию о том, какой adnest_id какому "классу" union_adnest_id принадлежит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+---------------------+------------------+-------------+
| adnest_id |   union_adnest_id   | competition_type | ratio       |
+-----------+---------------------+------------------+-------------+
|      1370 |                1718 |                3 |           1 |
|       368 |                 291 |                3 | 0.009009993 |
|       149 |                 291 |                1 | 0.000020055 |
|      1343 |                1718 |                3 |           1 |
|       369 |                 291 |                3 | 0.000391266 |
+-----------+---------------------+------------------+-------------+



Нужно получить вот что:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|   union_adnest_id   | ratio       | adnest_id | 1-10    | 11-50  | 51-100 | 101-500 | 501-10000 |
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|                 291 | 0.174616825 |       368 |      31 |      3 |      0 |       0 |         0 |
|                 291 |           1 |       149 |   22916 |    395 |      0 |       0 |         0 |
|                 291 |           1 |       369 |   42638 |   4600 |      0 |       0 |         0 |
|                1718 |           1 |      1370 |   21309 |    496 |      0 |       0 |         0 |
|                1718 |           1 |      1343 |     109 |      0 |      0 |       0 |         0 |



Как это можно сделать?
...
Рейтинг: 0 / 0
18.09.2014, 22:05:34
    #38750996
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Стас0н,

ratio во последней таблице как считается?
почему 0.174616825 а остальные 1 ?
...
Рейтинг: 0 / 0
18.09.2014, 23:46:19
    #38751039
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
javajdbcСтас0н,
ratio во последней таблице как считается?
почему 0.174616825 а остальные 1 ?

ratio не считается, это данные из таблцы
...
Рейтинг: 0 / 0
19.09.2014, 06:26:15
    #38751106
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Стас0нjavajdbcСтас0н,
ratio во последней таблице как считается?
почему 0.174616825 а остальные 1 ?

ratio не считается, это данные из таблцыв какой строке какой из исходных таблиц можно увидеть значение "0.174616825"?
...
Рейтинг: 0 / 0
19.09.2014, 10:43:48
    #38751253
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Виноват, просто когда собирал данные в таблицу, неправильно значения подправил. Вот правильный вариант:

Вот первая таблица (таблица tab) (содержащая adnest_id и некоторую информацию):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+-------+-------+--------+---------+-----------+
| adnest_id | 1-10  | 11-50 | 51-100 | 101-500 | 501-10000 |
+-----------+-------+-------+--------+---------+-----------+
|      1370 |    31 |     3 |      0 |       0 |         0 |
|       368 | 22916 |   395 |      0 |       0 |         0 |
|       149 | 42638 |  4600 |      0 |       0 |         0 |
|      1343 | 21309 |   496 |      0 |       0 |         0 |
|       369 |   109 |     0 |      0 |       0 |         0 |
+-----------+-------+-------+--------+---------+-----------+


А вот вторая (таблица map), которая содержит информацию о том, какой adnest_id какому "классу" union_adnest_id принадлежит:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+---------------------+------------------+-------------+
| adnest_id |   union_adnest_id   | competition_type | ratio       |
+-----------+---------------------+------------------+-------------+
|      1370 |                1718 |                3 |           1 |
|       368 |                 291 |                3 | 0.009009993 |
|       149 |                 291 |                1 | 0.000020055 |
|      1343 |                1719 |                3 |           1 |
|       369 |                 291 |                3 | 0.000391266 |
+-----------+---------------------+------------------+-------------+


Желаемый результат:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|   union_adnest_id   | ratio       | adnest_id | 1-10    | 11-50  | 51-100 | 101-500 | 501-10000 |
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|                 291 | 0.009009993 |       368 |   22916 |    395 |      0 |       0 |         0 |
|                 291 | 0.000020055 |       149 |   42638 |   4600 |      0 |       0 |         0 |
|                 291 | 0.000391266 |       369 |     109 |      0 |      0 |       0 |         0 |
|                1718 |           1 |      1370 |      31 |      3 |      0 |       0 |         0 |
|                1719 |           1 |      1343 |   21309 |    496 |      0 |       0 |         0 |
...
Рейтинг: 0 / 0
19.09.2014, 13:03:22
    #38751445
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Стас0н,

или я чего-то не понимаю, или вам нудно просто заJOINить эти таблицы и выбрать только нужные поля...
...
Рейтинг: 0 / 0
19.09.2014, 13:05:01
    #38751449
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
да я вот и делал так, только получалось, что от одного класса был только один adnest_id
...
Рейтинг: 0 / 0
19.09.2014, 13:26:53
    #38751486
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
если adnest_id в соединяемых таблицах уникален (насколько я понимаю из предыдущей темы), то такого быть не может
вы что-то не то написали
...
Рейтинг: 0 / 0
22.09.2014, 16:37:13
    #38753720
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Видимо, в чем-то косячу, но не могу понять в чем. Вот запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
select 
	map.effective_adnest_id, 
	map.ratio,
	tab2.*
from map
join 
	(
		select 
			tab.adnest_id,
			sum(tab.frequency between 1 and 10) as "1-10",
			sum(tab.frequency between 11 and 50) as "11-50",
			sum(tab.frequency between 51 and 100) as "51-100",
			sum(tab.frequency between 101 and 500) as "101-500",
			sum(tab.frequency between 501 and 1000) as "501-10000"
		from
		(
			select adnest_id, visitor_id, count(visitor_id) as frequency
			from hist_impressions
			inner join timeslot t on t.timeslot_id = hist_impressions.timeslot_id
			where start_date between '2014-05-01 00:00:00' and '2014-09-08 00:00:00'
			group by adnest_id, visitor_id
			order by adnest_id, count(visitor_id) desc
		) tab
		group by 
			tab.adnest_id
	) tab2
on tab2.adnest_id = map.adnest_id
group by 
	effective_adnest_id,
	adnest_id
;



Таблица tab выглядит так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+-------+-------+--------+---------+-----------+
| adnest_id | 1-10  | 11-50 | 51-100 | 101-500 | 501-10000 |
+-----------+-------+-------+--------+---------+-----------+
|      1370 |    31 |     3 |      0 |       0 |         0 |
|       368 | 22916 |   395 |      0 |       0 |         0 |
|       149 | 42638 |  4600 |      0 |       0 |         0 |
|      1343 | 21309 |   496 |      0 |       0 |         0 |
|       369 |   109 |     0 |      0 |       0 |         0 |
+-----------+-------+-------+--------+---------+-----------+


таблица map:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+---------------------+------------------+-------------+
| adnest_id |   union_adnest_id   | competition_type | ratio       |
+-----------+---------------------+------------------+-------------+
|      1370 |                1718 |                3 |           1 |
|       368 |                 291 |                3 | 0.009009993 |
|       149 |                 291 |                1 | 0.000020055 |
|      1343 |                1719 |                3 |           1 |
|       369 |                 291 |                3 | 0.000391266 |
+-----------+---------------------+------------------+-------------+



Вот результат:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
| effective_adnest_id | ratio       | adnest_id | 1-10    | 11-50  | 51-100 | 101-500 | 501-10000 |
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|                   8 | 0.174616825 |         8 |      31 |      3 |      0 |       0 |         0 |
|                  13 |           1 |        13 |   22916 |    395 |      0 |       0 |         0 |
|                  17 |           1 |        17 |   42638 |   4600 |      0 |       0 |         0 |
........
|                 228 |           1 |       228 |   17695 |     13 |      0 |       0 |         0 |
|                 254 |           1 |       254 |   32825 |    281 |      0 |       0 |         0 |
|                 291 | 0.000546569 |       291 |  822669 |  36352 |      0 |       0 |         0 |
|                 294 |           1 |       294 |      76 |      0 |      0 |       0 |         0 |


Тут проблема в том, что строчек с efective_adnest_id должна быть не одна.. в чем может быть проблема?
...
Рейтинг: 0 / 0
22.09.2014, 16:48:07
    #38753734
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Несколько опечаток в предыдущем посте, правильно вот так:
Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
select 
	map.effective_adnest_id, 
	map.ratio,
	tab2.*
from map
join 
	(
		select 
			tab.adnest_id,
			sum(tab.frequency between 1 and 10) as "1-10",
			sum(tab.frequency between 11 and 50) as "11-50",
			sum(tab.frequency between 51 and 100) as "51-100",
			sum(tab.frequency between 101 and 500) as "101-500",
			sum(tab.frequency between 501 and 1000) as "501-10000"
		from
		(
			select adnest_id, visitor_id, count(visitor_id) as frequency
			from hist_impressions
			inner join timeslot t on t.timeslot_id = hist_impressions.timeslot_id
			where start_date between '2014-05-01 00:00:00' and '2014-09-08 00:00:00'
			group by adnest_id, visitor_id
			order by adnest_id, count(visitor_id) desc
		) tab
		group by 
			tab.adnest_id
	) tab2
on tab2.adnest_id = map.adnest_id
group by 
	effective_adnest_id,
	adnest_id
;



Таблица tab выглядит так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+-------+-------+--------+---------+-----------+
| adnest_id | 1-10  | 11-50 | 51-100 | 101-500 | 501-10000 |
+-----------+-------+-------+--------+---------+-----------+
|      1370 |    31 |     3 |      0 |       0 |         0 |
|       368 | 22916 |   395 |      0 |       0 |         0 |
|       149 | 42638 |  4600 |      0 |       0 |         0 |
|      1343 | 21309 |   496 |      0 |       0 |         0 |
|       369 |   109 |     0 |      0 |       0 |         0 |
+-----------+-------+-------+--------+---------+-----------+



таблица map:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+-----------+---------------------+------------------+-------------+
| adnest_id | effective_adnest_id | competition_type | ratio       |
+-----------+---------------------+------------------+-------------+
|      1370 |                1718 |                3 |           1 |
|       368 |                 291 |                3 | 0.009009993 |
|       149 |                 291 |                1 | 0.000020055 |
|      1343 |                1719 |                3 |           1 |
|       369 |                 291 |                3 | 0.000391266 |
+-----------+---------------------+------------------+-------------+




Вот результат:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
| effective_adnest_id | ratio       | adnest_id | 1-10    | 11-50  | 51-100 | 101-500 | 501-10000 |
+---------------------+-------------+-----------+---------+--------+--------+---------+-----------+
|                   8 | 0.174616825 |         8 |      31 |      3 |      0 |       0 |         0 |
|                  13 |           1 |        13 |   22916 |    395 |      0 |       0 |         0 |
|                  17 |           1 |        17 |   42638 |   4600 |      0 |       0 |         0 |
........
|                 228 |           1 |       228 |   17695 |     13 |      0 |       0 |         0 |
|                 254 |           1 |       254 |   32825 |    281 |      0 |       0 |         0 |
|                 291 | 0.000546569 |       291 |  822669 |  36352 |      0 |       0 |         0 |
|                 294 |           1 |       294 |      76 |      0 |      0 |       0 |         0 |



Тут проблема в том, что строчек с efective_adnest_id = 291 должна быть не одна.. в чем может быть проблема?
...
Рейтинг: 0 / 0
23.09.2014, 04:54:19
    #38754134
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Стас0н,
`tab2` для каждого `adnest_id` возвращает одну запись,
`map` соединяешь с `tab2` по `adnest_id`.

Поэтому
Код: sql
1.
2.
3.
4.
5.
select
  count(adnest_id) 'Должно быть строчек с effective_adnest_id = 291'
from map
where
  effective_adnest_id = 291;
...
Рейтинг: 0 / 0
23.09.2014, 04:55:49
    #38754135
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Стас0нпроблема в том, что строчек с efective_adnest_id = 291 должна быть не однаа из запроса следует, что как раз-таки одна...
Стас0н
Код: sql
1.
2.
group by 
	effective_adnest_id
...
Рейтинг: 0 / 0
24.09.2014, 13:12:15
    #38756041
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
благодарю!
Видимо, не разглядел..
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединение таблиц / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]