Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / MySQL |
![]() ![]() |
Валерий666 Member Откуда: Сообщений: 222 |
Есть 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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 18453 |
Покажите пример исходных данных и нужный результат для них. |
5 дек 18, 18:39 [21754828] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
Пример таблиц и результата(упрощенный): http://rgho.st/8hxPZLV77.view Т.е. запрос должен выдать как и писал выше 4 столбца exe, COUNT(*), fio, adress где COUNT(*) - количество повторов по ФИО и АДРЕСУ. |
||
6 дек 18, 15:03 [21755895] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
а он на данный момнт выдает количество строк с исполнителями из второй таблицы. ???? |
6 дек 18, 15:08 [21755903] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 18453 |
Валерий666, приложите скриншот к сообщению. А ещё лучше - дайте всё текстом в теге "Table" (поля разделяются запятыми), проверив предварительно, что всё выглядит нормально (кнопка "Просмотр"). |
6 дек 18, 15:52 [21755985] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
Ничего не понял то table. Вот скрин: К сообщению приложен файл. Размер - 120Kb |
||
6 дек 18, 16:02 [21756009] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 18453 |
Где НУЖНЫЙ результат??? |
||
6 дек 18, 16:34 [21756078] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 18453 |
Нажимаешь кнопку "Table". На экране появляется [CSV][/CSV] Вводишь заголовки и данные, разделяя поля запятыми. Например [CSV]Поле 1, Поле 2, Поле 3 1, 2, 3 4, 5, 6[/CSV] Жмёшь "Просмотр", убеждаешься, что таблица выглядит нормально
Если нет - исправляешь и снова проверяешь. Если да - жмёшь "Опубликовать". |
||||||||||||
6 дек 18, 16:39 [21756084] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
Понял:-) Ладно, попробую перефразировать: Есть таблица заявок:
Есть таблица исполнителей по заявкам
связаны они по полю id (LEFT JOIN), т.е. в данном случае к заявке 001 прикреплены 3 исполнителя. к 002,003,004 по одному. Связка эта нужна чтобы сделать срез (условие в запросе) по ФИО исполнителя. Мне нужно вывести количество дубликатов (от одного и того же человека. по одному и тому же адресу) из первой таблицы, чтобы результат был такой:
На данный момент у меня результат не верный из-за связки двух таблиц, количество COUNT(*), считается по количеству исполнителей из второй таблицы.
Вопрос: как правильно составить запрос, или связать таблицы? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 дек 18, 16:54 [21756114] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 18453 |
COUNT(Исполнители.ИД). При условии, что поле Заявки.ИД - уникальное. |
6 дек 18, 19:52 [21756323] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 2565 |
LEFT JOIN на 001 никак не влияет. А вот для того, чтоб показать нолик для 005,006,007 - нужен. |
||
7 дек 18, 02:15 [21756532] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
Мне нужна элементарная группировка с результирующим полем. Но из-за JOIN я не могу ее сделать. |
||||
7 дек 18, 08:27 [21756606] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 2565 |
Тебе Akina ответил, как надо исправить. |
7 дек 18, 10:54 [21756755] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
982183, Так не правильно ответил) Оно сейчас у меня и считает количество исполнителей. А мне надо чтобы считало количество дубликатов из заявок. |
7 дек 18, 11:13 [21756765] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 2565 |
Ты произвел корректировку? "Оно" у тебя сейчас в каком виде? |
7 дек 18, 11:57 [21756821] Ответить | Цитировать Сообщить модератору |
Валерий666 Member Откуда: Сообщений: 222 |
Вот в таком, результат, такой же, ничего не поменялось. 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 | ![]() |