Избегание столбцов из предложения groupby

Здесь мне нужно избегать этих двух столбцов из предложения group by, где оно возвращает большее количество записей по сравнению с моим ожидаемым значением.

На самом деле результат запроса от st.cnt возвращает 3 записи, но когда мы запускаем как SP, я получаю вдвое больше, чем ожидалось.

st_cnt.COUNT_FILES,
st_cnt.COUNT_SCANS,

SELECT table1.DA_SEC,
  table1.DA_REG,
  table1.PROJ,
  table1.SOL,
  table1.SCAN_YEAR_MON,
  to_char(TO_DATE(table1.SCAN_YEAR_MON, 'YYYY-MM'), 'YYYY'),
  to_char(TO_DATE(table1.SCAN_YEAR_MON, 'YYYY-MM'), 'MM'),
  COUNT(DISTINCT table1.ISSUE_ID),
  COUNT(DISTINCT table1.USERNAME),
  COUNT(DISTINCT table1.PATH),
  st_cnt.COUNT_FILES,
  st_cnt.COUNT_SCANS,
  sum(unq_Pro.HIGH_CNT),
  sum(unq_Pro.MEDIUM_CNT),
  sum(unq_Pro.LOW_CNT),
  sum(SUPPR_HIGH) - sum(UNSUPPR_HIGH),
  sum(SUPPR_MEDIUM) - sum(UNSUPPR_MEDIUM),
  sum(SUPPR_LOW) - sum(UNSUPPR_LOW),
  CURRENT_DATE
FROM table1
JOIN
  (SELECT PROJ, SOL, SCAN_YEAR, SCAN_MONTH, COUNT(DISTINCT PATH) COUNT_FILES, COUNT(DISTINCT SCAN_ID) COUNT_SCANS FROM table2 GROUP BY PROJ, SOL, SCAN_YEAR, SCAN_MONTH) st_cnt
ON st_cnt.PROJ = table1.PROJ--AND st_cnt.SOL = table1.SOL
GROUP BY table1.DA_SEC, table1.DA_REG, table1.PROJ, table1.SOL, table1.SCAN_YEAR_MON, st_cnt.COUNT_FILES, st_cnt.COUNT_SCAN;
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
55
1

Ответы 1

В таких сценариях может быть действительно полезно много времени на использование With Clause. Вот ветка ask tom, в которой обсуждается предложение With Спросите Тома Линка Также полезная ссылка на факторинг подзапросов с использованием здесь с предложением Факторинг подзапроса

Это также помогает нам узнать, как выглядят данные для таблицы 1 в этом случае, чтобы мы могли проверить ответ. Но с информацией, которой вы поделились, что-то вроде этого могло бы вам помочь

WITH TAB1_DATA AS (
SELECT table1.DA_SEC,
 table1.DA_REG,
 table1.PROJ,
 table1.SOL,
 table1.SCAN_YEAR_MON,
 to_char(TO_DATE(table1.SCAN_YEAR_MON, 'YYYY-MM'), 'YYYY'),
 to_char(TO_DATE(table1.SCAN_YEAR_MON, 'YYYY-MM'), 'MM'),
COUNT(DISTINCT table1.ISSUE_ID),
COUNT(DISTINCT table1.USERNAME),
COUNT(DISTINCT table1.PATH),
sum(unq_Pro.HIGH_CNT),
sum(unq_Pro.MEDIUM_CNT),
sum(unq_Pro.LOW_CNT),
sum(SUPPR_HIGH) - sum(UNSUPPR_HIGH),
sum(SUPPR_MEDIUM) - sum(UNSUPPR_MEDIUM),
sum(SUPPR_LOW) - sum(UNSUPPR_LOW),
CURRENT_DATE
  FROM table1
GROUP BY table1.DA_SEC, table1.DA_REG, table1.PROJ, table1.SOL, table1.SCAN_YEAR_MON
)
 SELECT TD.* ,  st_cnt.COUNT_FILES,st_cnt.COUNT_SCANS FROM TAB1_DATA TD ,
(SELECT PROJ, SOL, SCAN_YEAR, SCAN_MONTH, COUNT(DISTINCT PATH) COUNT_FILES, 
COUNT(DISTINCT SCAN_ID) COUNT_SCANS FROM table2 GROUP BY PROJ, SOL, SCAN_YEAR, 
SCAN_MONTH) st_cnt
WHERE st_cnt.PROJ = TD.PROJ;

Тем не менее, записи делятся на большее количество пунктов

saru 26.06.2018 23:24

Кроме того, это хранимая процедура, которую мы вставляем в целевую таблицу. Как мы ссылаемся на выборку с предложением «WITH» в хранимой процедуре.

saru 27.06.2018 05:44

Другие вопросы по теме