SQLinfo.ru - Все о MySQL Фестиваль «Российские интернет-технологии» 2017

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.04.2017 08:31:09

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Запрос к нескольким таблицам с одинаковым полем

Здравствуйте!
Есть 6 разных таблиц с одинаковым полем AFFECTED_ITEM
Необходимо вывести колонку AFFECTED_ITEM и Count по каждой таблице



К примеру

AFFECTED_ITEM | Table1 | Table2 | Table3 | Table6 |
--------------------------------------------------------------
Item1              |  53      |   45    |   12     |   0      |
--------------------------------------------------------------
Item2              |   4       |   13    |   77     |   9      |
--------------------------------------------------------------
Item3              |   7       |    0    |   24      |   23    |

Неактивен

 

#2 17.04.2017 08:58:44

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 171

Re: Запрос к нескольким таблицам с одинаковым полем

SELECT
   t.AFFECTED_ITEM,
   count(t1.AFFECTED_ITEM) Table1,
   count(t2.AFFECTED_ITEM) Table2,
   ...
FROM (
SELECT DISTINCT AFFECTED_ITEM FROM Table1
UNION
SELECT DISTINCT AFFECTED_ITEM FROM Table2
UNION
...
) t
LEFT JOIN  Table1 t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN  Table2 t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
...
ORDER BY AFFECTED_ITEM;

Отредактированно klow (17.04.2017 09:01:38)

Неактивен

 

#3 17.04.2017 09:14:49

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

klow написал:

SELECT
   t.AFFECTED_ITEM,
   count(t1.AFFECTED_ITEM) Table1,
   count(t2.AFFECTED_ITEM) Table2,
   ...
FROM (
SELECT DISTINCT AFFECTED_ITEM FROM Table1
UNION
SELECT DISTINCT AFFECTED_ITEM FROM Table2
UNION
...
) t
LEFT JOIN  Table1 t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN  Table2 t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
...
ORDER BY AFFECTED_ITEM;

Добрый день!
Выдает ошибку Column 't.AFFECTED_ITEM' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

Неактивен

 

#4 17.04.2017 09:18:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

ORDER BY AFFECTED_ITEM;
замените на
GROUP BY t.AFFECTED_ITEM
ORDER BY t.AFFECTED_ITEM;

Неактивен

 

#5 17.04.2017 09:27:24

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

ORDER BY AFFECTED_ITEM;
замените на
GROUP BY t.AFFECTED_ITEM
ORDER BY t.AFFECTED_ITEM;

Count все-таки неточный получается.
Отдельно еще запрос сделала


Прикрепленные файлы:
Attachment Icon 234.PNG, Размер: 29,159 байт, Скачано: 11

Неактивен

 

#6 17.04.2017 09:42:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

попробуйте так:

SELECT
   t.AFFECTED_ITEM,
   Table1,
   Table2,
   ...
FROM (
SELECT DISTINCT AFFECTED_ITEM FROM Table1
UNION
SELECT DISTINCT AFFECTED_ITEM FROM Table2
UNION
...
) t
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table1 from Table1 group by AFFECTED_ITEM) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table2 from Table2 group by AFFECTED_ITEM) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
...
ORDER BY t.AFFECTED_ITEM;

Неактивен

 

#7 17.04.2017 12:03:43

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

попробуйте так:

SELECT
   t.AFFECTED_ITEM,
   Table1,
   Table2,
   ...
FROM (
SELECT DISTINCT AFFECTED_ITEM FROM Table1
UNION
SELECT DISTINCT AFFECTED_ITEM FROM Table2
UNION
...
) t
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table1 from Table1 group by AFFECTED_ITEM) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table2 from Table2 group by AFFECTED_ITEM) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
...
ORDER BY t.AFFECTED_ITEM;

Спасибо!Работает супер!
Еще вопрос:
Мне необходимо фильтровать по @Parameters

WHERE OPEN_TIME between @StartDate and @EndDate  + 1
and COMPANY in @Company

куда их включать?

Неактивен

 

#8 17.04.2017 12:52:34

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

предположу, что в подзапросы, но это зависит от того, что именно нужно
пример тестовых данных и желаемый результат сильно упрощают понимание

Неактивен

 

#9 17.04.2017 13:02:34

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

предположу, что в подзапросы, но это зависит от того, что именно нужно
пример тестовых данных и желаемый результат сильно упрощают понимание

Результат мой выносит таблицу с колонкой Affected_item, которая хранит Услуги и все остальные колонки с количеством услуг по каждому направлению.Теперь я должна в @Parameters указать диапазон даты,когда эта услуга была подана, в какой компании.

это результат на 5 марта 2017 года

AFFECTED_ITEM | Table1   | Table2    | Table3 | Table6 |
-------------------------------------------------------------------
Item1               |  53       |   45        |   12    |   0       |
-------------------------------------------------- ----------------
Item2               |   4        |   13       |   77    |   9        |
-------------------------------------------------------------------
Item3               |   7        |    0        |   24    |   23      |




А это на 7 апреля 2017

AFFECTED_ITEM | Table1   | Table2    | Table3 | Table6 |
-------------------------------------------------------------------
Item1               |  58       |   46        |   45    |   2       |
-------------------------------------------------- ----------------
Item2               |   4        |   18       |   77    |   19      |
-------------------------------------------------------------------
Item3               |   44        |    22    |   24    |   23      |



Даты будут регулироваться в @Parameters
С - По

Отредактированно Marina_A (17.04.2017 13:18:27)


Прикрепленные файлы:
Attachment Icon Parameters.PNG, Размер: 6,677 байт, Скачано: 7

Неактивен

 

#10 17.04.2017 13:09:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

ещё больше запутали

Неактивен

 

#11 17.04.2017 13:19:26

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

ещё больше запутали

Посмотрите мой отредактированный ответ выше

Неактивен

 

#12 17.04.2017 13:26:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

т.е. при подсчете count(AFFECTED_ITEM) нужно считать не все значения которые есть в таблице, а только те, которые относятся к диапазону дат?
тогда доп условие добавляется в подзапросы
..
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table1 from Table1 where тут доп условия group by AFFECTED_ITEM) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
..

Неактивен

 

#13 18.04.2017 08:44:54

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

т.е. при подсчете count(AFFECTED_ITEM) нужно считать не все значения которые есть в таблице, а только те, которые относятся к диапазону дат?
тогда доп условие добавляется в подзапросы
..
LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table1 from Table1 where тут доп условия group by AFFECTED_ITEM) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
..

Спасибо!
Теперь делаю запрос похожий,но уже с 2 колонками,добавила еще одно поле SUBCATEGORY.
Только работает запрос некорректно уже
Можете подсказать,что не так тут


SELECT
   t.AFFECTED_ITEM,
   t.SUBCATEGORY,
   Table1,
   Table2,
   Table3
FROM (
SELECT DISTINCT AFFECTED_ITEM,SUBCATEGORY FROM  [dbo].[CM3RM1]
UNION
SELECT  DISTINCT AFFECTED_ITEM,SUBCATEGORY FROM [dbo].[INCIDENTSM1]
UNION
SELECT DISTINCT AFFECTED_ITEM,SUBCATEGORY FROM  [dbo].[PROBSUMMARYM1]
) t
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(AFFECTED_ITEM) as Table1 from [dbo].[CM3RM1] WHERE SUBCATEGORY IS NOT NULL group by AFFECTED_ITEM,SUBCATEGORY ) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY,count(AFFECTED_ITEM) as Table2 from [dbo].[INCIDENTSM1] WHERE SUBCATEGORY IS NOT NULL group by AFFECTED_ITEM,SUBCATEGORY) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY,count(AFFECTED_ITEM) as Table3 from [dbo].[PROBSUMMARYM1] WHERE SUBCATEGORY IS NOT NULL group by AFFECTED_ITEM,SUBCATEGORY) as t3 ON t.AFFECTED_ITEM = t3.AFFECTED_ITEM

ORDER BY t.AFFECTED_ITEM

Отредактированно Marina_A (18.04.2017 09:22:38)


Прикрепленные файлы:
Attachment Icon Снимок1.PNG, Размер: 12,684 байт, Скачано: 5

Неактивен

 

#14 18.04.2017 10:09:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

сделайте тестовый пример на http://sqlfiddle.com/

Неактивен

 

#15 19.04.2017 05:50:35

Marina_A
Участник
Зарегистрирован: 14.03.2017
Сообщений: 18

Re: Запрос к нескольким таблицам с одинаковым полем

vasya написал:

сделайте тестовый пример на http://sqlfiddle.com/

Здравствуйте!
Попробовала,получилось.
Только немного иначе. Он выносит все результаты,не группируя.
А нужна все таки группировка.где бы подсчет общий был по Услуге и субкатегории
Результат показан во вложении.
Спасибо!




SELECT
   t.AFFECTED_ITEM,
   t.SUBCATEGORY
   Table1,
   Table2,
   Table3,
   Table4,
   Table5,
   Table6
FROM (
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM  [dbo].[CM3RM1]
UNION
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[INCIDENTSM1]
UNION
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM  [dbo].[PROBSUMMARYM1]
UNION
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM  [dbo].[REQUESTM1]
UNION
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[ROOTCAUSEM1]
UNION
SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[INCIDENTSM1]
) t
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table1 from [dbo].[CM3RM1] group by AFFECTED_ITEM, SUBCATEGORY) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table2 from [dbo].[INCIDENTSM1] group by AFFECTED_ITEM, SUBCATEGORY) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table3 from [dbo].[PROBSUMMARYM1] group by AFFECTED_ITEM, SUBCATEGORY) as t3 ON t.AFFECTED_ITEM = t3.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table4 from [dbo].[REQUESTM1] group by AFFECTED_ITEM, SUBCATEGORY) as t4 ON t.AFFECTED_ITEM = t4.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table5 from [dbo].[ROOTCAUSEM1] group by AFFECTED_ITEM, SUBCATEGORY) as t5 ON t.AFFECTED_ITEM = t5.AFFECTED_ITEM
LEFT JOIN (select AFFECTED_ITEM, SUBCATEGORY, count(*) as Table6 from [dbo].[INCIDENTSM1] WHERE category = 'service catalog' group by AFFECTED_ITEM, SUBCATEGORY) as t6 ON t.AFFECTED_ITEM = t6.AFFECTED_ITEM

WHERE t.AFFECTED_ITEM IS NOT NULL AND t.SUBCATEGORY IS NOT NULL
ORDER BY t.AFFECTED_ITEM, T.SUBCATEGORY

Отредактированно Marina_A (19.04.2017 06:01:58)


Прикрепленные файлы:
Attachment Icon Снимок1.PNG, Размер: 12,684 байт, Скачано: 7

Неактивен

 

#16 19.04.2017 11:23:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5156

Re: Запрос к нескольким таблицам с одинаковым полем

а где пример тестовых данных?
т.е.
create table t1 ..
insert into t1 ..
create table t2 ..
insert into t2 ..

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson