Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788

использования union

18.03.2023, 17:35. Показов 624. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В БД примерно 6 таблиц. Нужно сделать сводную выборку из этих таблиц.
Для каждого параметра я сделал запросы в разные таблицы, join все без проблем. Но теперь эти показатели не могу свести в одну таблицу.
Если пытаюсь сделать 10ки join то получается бред.
Попробовал объединить с помощью union он вроде для этого и нужен. Но у него какие то особенности работы и ни как победить его не могу.
Подскажите что не так?
Должно быть 4 столбика, имя, АР, NW, CM
Конечно в каждой таблице разное количество столбцов.
Объединить join не получается, цифры не правильные получаются(

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT 
users.display_name, 
COUNT(CASE WHEN user_inter.owner_type='ac_info_app' THEN 1 END) AS AP,
COUNT(CASE WHEN user_inter.owner_type='ac_info_need' THEN 1 END) AS NW
 
FROM user_inter
JOIN users ON user_inter.user_id = users.id 
JOIN ac_infos ON user_inter.owner_id = ac_infos.id
JOIN pr_infos ON ac_infos.info_id = pr_infos.id
GROUP BY 1 --если без него, говорит ошибка нужна группировка
 
UNION ALL 
SELECT 
COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CM
FROM com_inter
JOIN com ON com_inter.com_id = com.id
JOIN ac_infos ON com_inter.owner_id = ac_infos.id
JOIN pr_infos ON ac_infos.info_id = pr_infos.id
JOIN users ON pr_infos.author_id = users.id
 
GROUP BY 1 --если без него, говорит ошибка нужна группировка
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2023, 17:35
Ответы с готовыми решениями:

UNION types numeric and interval cannot be matched
Здравствуйте всем. Помогите пожалуйста найти ошибку в коде. При компиляции выходит ошибка - UNION types numeric and interval cannot be...

Как в запросе с UNION вывести результаты в отдельных колонках?
Привет всем. Собственно вопрос в заголовке. Есть примерно такой запрос: SELECT count(*) as kol1 FROM qr_prih WHERE regp = '91100' and...

union как определить из какой таблице запись после UNION?
Подскажите пожалуйста! Вот например две таблице (TEBLE_1) у которой поля row_1(BIGINT) и (TABLE_2) у которой поля row_2(TEXT) Я ИХ...

7
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
18.03.2023, 17:44
добавь вычисляеміе поля в обоиз селектах для выравнивания полей. в качестве значений можно null использовать
1
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
18.03.2023, 17:55  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
добавь вычисляеміе поля в обоиз селектах для выравнивания полей.
Я читал что должны был одинаковое количество значений в select, но так и не понял как это сделать. Потому что ругается на то что в тех таблицах нет нужных полей.

Так что ли? не понял, как написать

SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT 
users.display_name, 
COUNT(CASE WHEN user_inter.owner_type='ac_info_app' THEN 1 END) AS AP,
COUNT(CASE WHEN user_inter.owner_type='ac_info_need' THEN 1 END) AS NW
COUNT(CASE WHEN com_inter.owner_type IS NULL THEN 1 END) AS CM
 
SELECT 
users.display_name, 
COUNT(CASE WHEN user_inter.owner_type IS NULL THEN 1 END) AS AP,
COUNT(CASE WHEN user_inter.owner_type IS NULL THEN 1 END) AS NW
COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CM
Так вроде не правильно? какой должен быть синтаксис?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
18.03.2023, 18:14
Лучший ответ Сообщение было отмечено ArxangelXA как решение

Решение

что касается исходного варианта, то примерно в таком духе, ту чепуху в последнем посте не понял
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
    users.display_name, 
    COUNT(CASE WHEN user_inter.owner_type='ac_info_app' THEN 1 END) AS AP,
    COUNT(CASE WHEN user_inter.owner_type='ac_info_need' THEN 1 END) AS NW,
    CAST(NULL AS INT) AS CM
  FROM ...
UNION ALL 
SELECT
    NULL AS display_name, 
    NULL AS AP,
    NULL AS NW,
    COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CM
  FROM ...
1
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
18.03.2023, 20:56  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
CAST(NULL AS INT) AS CM
SQL Error [42601]: ERROR: syntax error at or near "CAST"

Добавлено через 37 минут
Спасибо работает, запятую пропустил)

Добавлено через 1 час 28 минут
Аватар,
Нет я ошибся не работает(((
В таблицу заноситься результат
SQL
1
CAST(NULL AS INT) AS CM
- значение это строки выводиться в таблицу, а оно равно 0

SQL
1
COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CM
- не отображается

Добавлено через 22 минуты
По сути если выводиться значение
SQL
1
CAST(NULL AS INT) AS CM
Значит в него как то должно попадать значение из второго запроса, но мне кажется оно не попадает.

Почему я так решил.
если в первом случае написать AS CM - это будет в таблице
а во втором случае написать AS Cmment - этого не будет в таблице
0
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
18.03.2023, 21:04  [ТС]
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT 
    users.display_name, 
    COUNT(CASE WHEN user_inter.owner_type='ac_info_app' THEN 1 END) AS AP,
    COUNT(CASE WHEN user_inter.owner_type='ac_info_need' THEN 1 END) AS NW,
    CAST(NULL AS INT) AS CM
 
FROM user_inter
    JOIN users ON user_inter.user_id = users.id 
    JOIN ac_infos ON user_inter.owner_id = ac_infos.id
    JOIN pr_infos ON ac_infos.info_id = pr_infos.id
GROUP BY 1
 
UNION ALL SELECT 
    NULL AS display_name, 
    NULL AS AP,
    NULL AS NW,
    COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CoM
 
FROM com_inter
    JOIN com ON com_inter.com_id = com.id
    JOIN ac_infos ON com_inter.owner_id = ac_infos.id
    JOIN pr_infos ON ac_infos.info_id = pr_infos.id
    JOIN users ON pr_infos.author_id = users.id
GROUP BY 1
Название: Снимок экрана 2023-03-18 210352.png
Просмотров: 39

Размер: 5.5 Кб
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
18.03.2023, 21:16
у тебя второй запрос ни чего не вернул
0
43 / 13 / 1
Регистрация: 20.08.2012
Сообщений: 788
18.03.2023, 21:22  [ТС]
если его отдельно запустить он возвращает значение, а с union null

Добавлено через 4 минуты
А я правильно понял что это выражение CAST(NULL AS INT) AS CM
отображает что получаем в COUNT(CASE WHEN com_inter.owner_type='ac_info_all_com' THEN 1 END) AS CoM

А то что они в конце через AS по разному называются это вообще как то влияет? Мне кажется между ними связи нет.

Добавлено через 34 секунды
в таблицу выводиться AS CM который из первого запроса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2023, 21:22
Помогаю со студенческими работами здесь

Union
Здравствуйте. Нужно сортировать записи в 2х таблицах по дате. Следующий запрос все делает как надо. SELECT date FROM a ...

Оператор UNION
С помощью оператор UNION, мне необходимо два столбца с одной таблицы перенести в другую,т.е первая таблица "ЧИТАТЕЛИ", в ней...

ORDER BY в UNION
Имеем таблицу CREATE DATABASE Solution; CREATE TABLE Solution.table_costs ( id SMALLINT NOT NULL AUTO_INCREMENT, ...

Использование WHERE с UNION ALL
Доброго времени суток. Подскажите пожалуйста как оформить запрос с условием WHERE из двух разных таблиц и отсортировать его. Сейчас пишу...

InSERT Union ?
Добрый вечер! Подскажите пожалуйста. мне нужно скопировать один столбец (Id_user) c максимальным Id_user из одной таблицы(users) и 3...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru