powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединение таблиц
13 сообщений из 13, страница 1 из 1
Объединение таблиц
    #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
Объединение таблиц
    #38750996
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

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

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

ratio не считается, это данные из таблцыв какой строке какой из исходных таблиц можно увидеть значение "0.174616825"?
...
Рейтинг: 0 / 0
Объединение таблиц
    #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
Объединение таблиц
    #38751445
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

или я чего-то не понимаю, или вам нудно просто заJOINить эти таблицы и выбрать только нужные поля...
...
Рейтинг: 0 / 0
Объединение таблиц
    #38751449
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я вот и делал так, только получалось, что от одного класса был только один adnest_id
...
Рейтинг: 0 / 0
Объединение таблиц
    #38751486
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если adnest_id в соединяемых таблицах уникален (насколько я понимаю из предыдущей темы), то такого быть не может
вы что-то не то написали
...
Рейтинг: 0 / 0
Объединение таблиц
    #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
Объединение таблиц
    #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
Объединение таблиц
    #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
Объединение таблиц
    #38754135
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0нпроблема в том, что строчек с efective_adnest_id = 291 должна быть не однаа из запроса следует, что как раз-таки одна...
Стас0н
Код: sql
1.
2.
group by 
	effective_adnest_id
...
Рейтинг: 0 / 0
Объединение таблиц
    #38756041
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
благодарю!
Видимо, не разглядел..
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединение таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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