Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
как совместить джойн и группировку (барабан) 04/09/2013 - 21:56:13
      Re: как совместить джойн и группировку (Akina) 04/09/2013 - 22:26:39
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 07:48:30
      Re: как совместить джойн и группировку (Akina) 05/09/2013 - 08:59:10
      Re: как совместить джойн и группировку (Akina) 05/09/2013 - 09:06:20
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 09:16:43
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 16:59:49
      Re: как совместить джойн и группировку (Akina) 05/09/2013 - 17:29:00
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 19:26:36
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 19:33:01
      Re: как совместить джойн и группировку (Akina) 05/09/2013 - 20:30:20
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 20:52:07
      Re: как совместить джойн и группировку (Akina) 05/09/2013 - 21:17:57
      Re: как совместить джойн и группировку (барабан) 05/09/2013 - 22:08:49
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 09:04:45
      Re: как совместить джойн и группировку (барабан) 06/09/2013 - 16:00:45
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 16:15:52
      Re: как совместить джойн и группировку (барабан) 06/09/2013 - 17:02:25
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 17:35:03
      Re: как совместить джойн и группировку (барабан) 06/09/2013 - 17:46:30
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 19:21:23
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 19:28:22
      Re: как совместить джойн и группировку (барабан) 06/09/2013 - 21:45:12
      Re: как совместить джойн и группировку (Akina) 06/09/2013 - 22:23:30
      Re: как совместить джойн и группировку (барабан) 06/09/2013 - 22:49:38
      Re: как совместить джойн и группировку (Akina) 07/09/2013 - 22:08:11
      Re: как совместить джойн и группировку (барабан) 08/09/2013 - 08:17:00
      Re: как совместить джойн и группировку (Akina) 08/09/2013 - 14:01:36
      Re: как совместить джойн и группировку (барабан) 08/09/2013 - 18:17:25
      Re: как совместить джойн и группировку (Akina) 08/09/2013 - 21:52:06
      Re: как совместить джойн и группировку (барабан) 09/09/2013 - 06:26:29
      Re: как совместить джойн и группировку (Akina) 09/09/2013 - 09:19:57
      Re: как совместить джойн и группировку (барабан) 09/09/2013 - 10:08:57
      Re: как совместить джойн и группировку (Akina) 09/09/2013 - 12:43:46
      Re: как совместить джойн и группировку (барабан) 09/09/2013 - 14:02:42
      Re: как совместить джойн и группировку (Akina) 09/09/2013 - 16:01:34
      Re: как совместить джойн и группировку (барабан) 09/09/2013 - 16:10:17
      Re: как совместить джойн и группировку (Akina) 09/09/2013 - 16:21:52
      Re: как совместить джойн и группировку (барабан) 09/09/2013 - 23:11:20
      Re: как совместить джойн и группировку (Akina) 10/09/2013 - 08:33:46
      Re: как совместить джойн и группировку (барабан) 10/09/2013 - 08:55:51

> Original message text:
> From: барабан - 04/09/2013 - 21:56:13
> Subject:как совместить джойн и группировку
> -----------------
>
> Приветствую, товарищи. Что-то ума у меня не хватает как это сделать.
> Раньше делал в несколько проходов: сохранял промежуточные результаты
> в виде таблицы и использовал ее в следующем запросе. Но то было на
> MS SQL, там можно сделать SELECT INTO TABLE, а в MYSQL нельзя. Да и
> другие причины есть. Уж с понедельника не могу осилить и сделтать
> работающий запрос. Что есть: две таблицы. Первая - список звонков
> сотрудников, вторая содержит коды городов и названия. Задача проста:
> подставить коды городов.
>
> таблицы
>
> calls:
> dst time
> -------------------------------
> 302299867 21
> 302299864 83
> 302289643 56
> 342289364 18
> 342209834 10
> 342298347 34
> 342290384 87
> 343239847 43
> 343277463 49
> 343243666 75
> 343349875 14
> 343375384 48
>
> dest
> code name
> -------------------------------
> 3 Russia
> 4 Russia
> ...
> 302 Russia Chita reg
> 342 Russia Perm reg
> 343 Russia Yekaterinburg reg
> 3022 Russia Chita
> 3422 Russia Perm
> 3432 Russia Yekaterinburg
> 3433 Russia Yekaterinburg
>
>
> на выходе надо получить что-то вроде
> code total name
> -------------------------------
> 3022 160 Russia Chita
> 3422 149 Russia Perm
> 3432 167 Russia Yekaterinburg
> 3433 62 Russia Yekaterinburg
>
> но сейчас у меня получается что-то вроде такого:
> code total name
> -------------------------------
> 3 160 Russia
> 302 149 Russia Chita reg
> 342 149 Russia Perm reg
> 343 62 Russia Yekaterinburg reg
> 3022 160 Russia Chita
> 3422 149 Russia Perm
> 3432 167 Russia Yekaterinburg
> 3433 62 Russia Yekaterinburg
>
> т.е. не выбирается по максимальной величине кода
>
> Запрос типа такой
> SELECT
> c.time,
> MAX(d.code) AS code,
> d.name
> FROM calls AS c
> LEFT JOIN dest AS d
> ON c.dst LIKE CONCAT(d.code,'%')
> GROUP BY code
>
> Будьте добры, наставьте на путь истиный, а то с джойнами у меня совсем туго
> Спасибо!
>
> PS: данные и запрос приближены к реальным
>


From: барабан - 05/09/2013 - 07:48:30
Subject:как совместить джойн и группировку
-----------------
Я просто прошу наставить на путь истинный, а не решать за меня задачу ;)

Но хорошо, вот все в SQL:

CREATE TABLE IF NOT EXISTS `calls` (
`dst` int(10) NOT NULL,
`time` int(5) NOT NULL,
KEY `dst` (`dst`)
) ENGINE=MyISAM;

INSERT INTO `calls` (`dst`, `time`) VALUES
(302299867, 21),
(302299864, 83),
(302289643, 56),
(342289364, 18),
(342209834, 10),
(342298347, 34),
(342290384, 87),
(343239847, 43),
(343277463, 49),
(343243666, 75),
(343349875, 14),
(343375384, 48);


CREATE TABLE IF NOT EXISTS `dest` (
`code` int(10) NOT NULL,
`name` varchar(30) NOT NULL
) ENGINE=MyISAM;

INSERT INTO `dest` (`code`, `name`) VALUES
(3, 'Russia'),
(4, 'Russia'),
(302, 'Russia Chita reg'),
(342, 'Russia Perm reg'),
(343, 'Russia Yekaterinburg reg'),
(3022, 'Russia Chita'),
(3422, 'Russia Perm'),
(3432, 'Russia Yekaterinburg'),
(3433, 'Russia Yekaterinburg');


Запрос прежний:

SELECT
c.time,
MAX(d.code) AS code,
d.name
FROM calls AS c
LEFT JOIN dest AS d
ON c.dst LIKE CONCAT(d.code,'%')
GROUP BY code


Это результат:

time code name
21 3 Russia
21 302 Russia Chita reg
18 342 Russia Perm reg
43 343 Russia Yekaterinburg reg
21 3022 Russia Chita
18 3422 Russia Perm
43 3432 Russia Yekaterinburg
14 3433 Russia Yekaterinburg

как видите повторяются записи. Т.е. не должно быть записей с кодами 3, 302, а только 3022, так как более длинный префикс - точнее. Эту задачу я решил для поиска соответствия для одной записи, а вот состряпать запрос, который в итоге выводил все как надо - не получается.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
42865



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |