Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом / 16 сообщений из 16, страница 1 из 1
05.12.2018, 17:26
    #39743012
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Есть 2 таблицы.
1-ая карточка заявки - register
2-ая исполнители - execute

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

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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.
Код: sql
1.
2.
3.
4.
5.
6.
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)



Как правильно сформировать?
...
Рейтинг: 0 / 0
05.12.2018, 18:39
    #39743048
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Покажите пример исходных данных и нужный результат для них.
...
Рейтинг: 0 / 0
06.12.2018, 15:03
    #39743553
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
AkinaПокажите пример исходных данных и нужный результат для них.

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

Т.е. запрос должен выдать как и писал выше 4 столбца
exe, COUNT(*), fio, adress
где COUNT(*) - количество повторов по ФИО и АДРЕСУ.
...
Рейтинг: 0 / 0
06.12.2018, 15:08
    #39743559
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
а он на данный момнт выдает количество строк с исполнителями из второй таблицы. ????
...
Рейтинг: 0 / 0
06.12.2018, 15:52
    #39743613
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Валерий666 , приложите скриншот к сообщению. А ещё лучше - дайте всё текстом в теге "Table" (поля разделяются запятыми), проверив предварительно, что всё выглядит нормально (кнопка "Просмотр").
...
Рейтинг: 0 / 0
06.12.2018, 16:02
    #39743630
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Akina Валерий666 , приложите скриншот к сообщению. А ещё лучше - дайте всё текстом в теге "Table" (поля разделяются запятыми), проверив предварительно, что всё выглядит нормально (кнопка "Просмотр").

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

Вот скрин:
...
Рейтинг: 0 / 0
06.12.2018, 16:34
    #39743679
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Валерий666Вот этот запрос отрабатывает верноРезультат этого запроса в точности соответствует таблице с заголовком "результат запроса должен быть". Так что непонятно, что не устраивает.

Где НУЖНЫЙ результат???
...
Рейтинг: 0 / 0
06.12.2018, 16:39
    #39743684
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Валерий666Ничего не понял то table.
Нажимаешь кнопку "Table". На экране появляется
Код: sql
1.
[CSV][/CSV]


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


Жмёшь "Просмотр", убеждаешься, что таблица выглядит нормально
Поле 1 Поле 2 Поле 31 2 34 5 6
Если нет - исправляешь и снова проверяешь. Если да - жмёшь "Опубликовать".
...
Рейтинг: 0 / 0
06.12.2018, 16:54
    #39743702
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Понял:-)

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

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

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

Есть таблица исполнителей по заявкам
IDФИО ответственного лица дата выставления дата исполнения001Иванов 01.01.2018 05.01.2018001Петров 01.01.2018 05.01.2018001Сидоров 01.01.2018 05.01.2018002Лобанов 01.01.2018 05.01.2018003Петухов 01.01.2018 05.01.2018004Козлов 01.01.2018 05.01.2018
связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.
Связка эта нужна чтобы сделать срез (условие в запросе) по ФИО исполнителя.

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

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

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

Вопрос: как правильно составить запрос, или связать таблицы?
...
Рейтинг: 0 / 0
06.12.2018, 19:52
    #39743823
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
COUNT(Исполнители.ИД). При условии, что поле Заявки.ИД - уникальное.
...
Рейтинг: 0 / 0
07.12.2018, 02:15
    #39743949
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Валерий666связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.


LEFT JOIN на 001 никак не влияет.
А вот для того, чтоб показать нолик для 005,006,007 - нужен.
...
Рейтинг: 0 / 0
07.12.2018, 08:27
    #39743992
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
982183Валерий666связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя.
к 002,003,004 по одному.


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

Мне нужна элементарная группировка с результирующим полем. Но из-за JOIN я не могу ее сделать.
...
Рейтинг: 0 / 0
07.12.2018, 10:54
    #39744084
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Тебе Akina ответил, как надо исправить.
...
Рейтинг: 0 / 0
07.12.2018, 11:13
    #39744090
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
982183,
Так не правильно ответил) Оно сейчас у меня и считает количество исполнителей. А мне надо чтобы считало количество дубликатов из заявок.
...
Рейтинг: 0 / 0
07.12.2018, 11:57
    #39744136
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Ты произвел корректировку?
"Оно" у тебя сейчас в каком виде?
...
Рейтинг: 0 / 0
07.12.2018, 12:24
    #39744178
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
982183Ты произвел корректировку?
"Оно" у тебя сейчас в каком виде?

Вот в таком, результат, такой же, ничего не поменялось.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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, то все работает отлично

Код: sql
1.
2.
3.
4.
5.
6.
7.
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)



Он считает количество дублей. Но мне к этой выборке надо еще поле из второй таблицы, что бы по нему был срез. Если я склеиваю таблицы, то получается хрень.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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