Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
Есть 2 таблицы.
1-ая карточка заявки - register
2-ая исполнители - execute

Стоит 2 задачи:
1. Нужен запрос, объединяющий эти 2 таблицы, (для возможности выборки по всем полям 2-ух таблиц).
2. Выборка(группировка) в этом же запросе повторяющихся карточек по полям fio и adress с результирующим полем - их количества.

Например: с одного и того же адрес от одного и того же человека поступило несколько заявок, их надо сгруппировать в одну строку+ поле с количеством заявок.

Нарисовал запрос, но он работает не правильно, как подправить?

SELECT GROUP_CONCAT(execute.exefio ORDER BY execute.exenum SEPARATOR '\n')  as exe,
  COUNT(*), 
  fio,
  adress FROM  register 
 LEFT  JOIN  execute ON execute.docid=register.docid 
 WHERE register.docid<>0 AND (datecreate between '2018-01-01' AND '2018-12-25') 
  GROUP BY register.fio,register.adress
  HAVING (COUNT(*) > 1)



Связка идет по ID заявки (поле docid). Результат : выводит строку с фио и адресом, но в COUNT почему-то считает количество строк по связанному идентификатору из таблицы execute, а мне надо что бы он считал количество строк из таблицы заявок - register.

Не могу понять как исправить...

Вот этот запрос отрабатывает верно, но тогда я не могу сделать срез по ФИО из таблицы execute поля exefio.
SELECT COUNT(*), 
  fio,
  adress FROM  register 
  WHERE register.docid<>0 AND (datecreate between '2018-01-01' AND '2018-12-25') 
  GROUP BY register.fio,register.adress
  HAVING (COUNT(*) > 1)


Как правильно сформировать?
5 дек 18, 17:26    [21754737]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18162
Покажите пример исходных данных и нужный результат для них.
5 дек 18, 18:39    [21754828]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
Akina
Покажите пример исходных данных и нужный результат для них.


Пример таблиц и результата(упрощенный):
http://rgho.st/8hxPZLV77.view

Т.е. запрос должен выдать как и писал выше 4 столбца
exe, COUNT(*), fio, adress
где COUNT(*) - количество повторов по ФИО и АДРЕСУ.
6 дек 18, 15:03    [21755895]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
а он на данный момнт выдает количество строк с исполнителями из второй таблицы. ????
6 дек 18, 15:08    [21755903]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18162
Валерий666, приложите скриншот к сообщению. А ещё лучше - дайте всё текстом в теге "Table" (поля разделяются запятыми), проверив предварительно, что всё выглядит нормально (кнопка "Просмотр").
6 дек 18, 15:52    [21755985]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
Akina
Валерий666, приложите скриншот к сообщению. А ещё лучше - дайте всё текстом в теге "Table" (поля разделяются запятыми), проверив предварительно, что всё выглядит нормально (кнопка "Просмотр").


Ничего не понял то table.

Вот скрин:

К сообщению приложен файл. Размер - 120Kb
6 дек 18, 16:02    [21756009]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18162
Валерий666
Вот этот запрос отрабатывает верно
Результат этого запроса в точности соответствует таблице с заголовком "результат запроса должен быть". Так что непонятно, что не устраивает.

Где НУЖНЫЙ результат???
6 дек 18, 16:34    [21756078]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18162
Валерий666
Ничего не понял то table.

Нажимаешь кнопку "Table". На экране появляется
[CSV][/CSV]

Вводишь заголовки и данные, разделяя поля запятыми. Например
[CSV]Поле 1, Поле 2, Поле 3
1, 2, 3
4, 5, 6[/CSV]

Жмёшь "Просмотр", убеждаешься, что таблица выглядит нормально
Поле 1 Поле 2 Поле 3
1 2 3
4 5 6

Если нет - исправляешь и снова проверяешь. Если да - жмёшь "Опубликовать".
6 дек 18, 16:39    [21756084]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
Понял:-)

Ладно, попробую перефразировать:

Есть таблица заявок:

IDФИО АДРЕС ТИП ЗАЯВКИ и Т.Д.
001Алисейко ул. Красновского д.2 Жалоба пр. инфа
002Алисейко ул. Красновского д.2 Заявление пр. инфа
003Бабученко ул. Маяковского д.12 Заявление пр. инфа
004Киреев ул. Держинского д.11 Заявление пр. инфа
005Алисейко ул. Красновского д.2 Жалоба пр. инфа
006Алисейко ул. Красновского д.2 Предписание пр. инфа
007Алисейко ул. Красновского д.2 Дополнение пр. инфа


Есть таблица исполнителей по заявкам
IDФИО ответственного лица дата выставления дата исполнения
001Иванов 01.01.2018 05.01.2018
001Петров 01.01.2018 05.01.2018
001Сидоров 01.01.2018 05.01.2018
002Лобанов 01.01.2018 05.01.2018
003Петухов 01.01.2018 05.01.2018
004Козлов 01.01.2018 05.01.2018

связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.
Связка эта нужна чтобы сделать срез (условие в запросе) по ФИО исполнителя.

Мне нужно вывести количество дубликатов (от одного и того же человека. по одному и тому же адресу) из первой таблицы, чтобы результат был такой:

ФИО АДРЕС COUNT (*).
Алисейко ул. Красновского д.2 5


На данный момент у меня результат не верный из-за связки двух таблиц, количество COUNT(*), считается по количеству исполнителей из второй таблицы.
ФИО АДРЕС COUNT (*).
Алисейко ул. Красновского д.2 3


Вопрос: как правильно составить запрос, или связать таблицы?
6 дек 18, 16:54    [21756114]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18162
COUNT(Исполнители.ИД). При условии, что поле Заявки.ИД - уникальное.
6 дек 18, 19:52    [21756323]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
982183
Member

Откуда: VL
Сообщений: 2482
Валерий666
связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.


LEFT JOIN на 001 никак не влияет.
А вот для того, чтоб показать нолик для 005,006,007 - нужен.
7 дек 18, 02:15    [21756532]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
982183
Валерий666
связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.


LEFT JOIN на 001 никак не влияет.
А вот для того, чтоб показать нолик для 005,006,007 - нужен.


Мне нужна элементарная группировка с результирующим полем. Но из-за JOIN я не могу ее сделать.
7 дек 18, 08:27    [21756606]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
982183
Member

Откуда: VL
Сообщений: 2482
Тебе Akina ответил, как надо исправить.
7 дек 18, 10:54    [21756755]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
982183,
Так не правильно ответил) Оно сейчас у меня и считает количество исполнителей. А мне надо чтобы считало количество дубликатов из заявок.
7 дек 18, 11:13    [21756765]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
982183
Member

Откуда: VL
Сообщений: 2482
Ты произвел корректировку?
"Оно" у тебя сейчас в каком виде?
7 дек 18, 11:57    [21756821]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Валерий666
Member

Откуда:
Сообщений: 200
982183
Ты произвел корректировку?
"Оно" у тебя сейчас в каком виде?


Вот в таком, результат, такой же, ничего не поменялось.
SELECT  
  GROUP_CONCAT(execute.exefio ORDER BY execute.exenum SEPARATOR '\n')  as exe,
  COUNT(execute.docid), 
  fio,
  adress FROM  register 
 LEFT JOIN  execute  ON register.docid=execute.docid 
 WHERE register.docid<>0 AND (datecreate between '2018-01-01' AND '2018-12-25') 
 GROUP BY register.fio,register.adress
 HAVING (COUNT(execute.docid) > 1)


Если убрать JOIN, то все работает отлично

SELECT  
  COUNT(*), 
  fio,
  adress FROM  register 
 WHERE register.docid<>0 AND (datecreate between '2018-01-01' AND '2018-12-25') 
 GROUP BY register.fio,register.adress
 HAVING (COUNT(*) > 1)


Он считает количество дублей. Но мне к этой выборке надо еще поле из второй таблицы, что бы по нему был срез. Если я склеиваю таблицы, то получается хрень.
7 дек 18, 12:24    [21756877]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить