Sql oracle group по подзапросу

Я получаю один и тот же номер электронной торговли на каждую дату. Я пытаюсь получить подсчет стоимости электронной торговли в зависимости от даты, которая отличается для каждой даты, поскольку общее число составляет всего 105 за весь октябрь, а не 391958. Есть идеи, как сгруппировать по выходу подзапроса? Спасибо!

SELECT   to_char(wcs1.start_tms,'DD/MM/YYYY') as dates,
(
    SELECT count(*) 
    FROM   ft_t_wcs1 wcs1,ft_t_stup stup 
    WHERE  stup.modl_id='ECOMMERC'
    AND    stup.CROSS_REF_ID=wcs1.acct_id
    AND    stup.end_tms IS NULL
) AS     ecommerce
FROM     ft_t_wcs1 wcs1, ft_t_stup stup
WHERE    wcs1.scenario='CREATE' 
AND      wcs1.acct_id IS NOT NULL 
AND      wcs1.start_tms BETWEEN add_months(TRUNC(SYSDATE,'mm'),-1) AND LAST_DAY(add_months(TRUNC(SYSDATE,'mm'),-1))
GROUP BY to_char(wcs1.start_tms,'DD/MM/YYYY')
ORDER BY to_char(wcs1.start_tms,'DD/MM/YYYY');

ВЫВОД Sql oracle group по подзапросу

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
5 573
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте изменить запросы ниже

select to_char(wcs1.start_tms,'DD/MM/YYYY') as dates,count(*) AS 
ecommerce
from ft_t_wcs1 wcs1, ft_t_stup stup
where stup.modl_id='ECOMMERC' and stup.CROSS_REF_ID=wcs1.acct_id and stup.end_tms is null wcs1.scenario='CREATE' and wcs1.acct_id is not null and 
wcs1.start_tms between add_months(TRUNC(SYSDATE,'mm'),-1) and 
LAST_DAY(add_months(TRUNC(SYSDATE,'mm'),-1))
group by to_char(wcs1.start_tms,'DD/MM/YYYY')
order by to_char(wcs1.start_tms,'DD/MM/YYYY');

- Другой способ использования предложения JOIN

select to_char(wcs1.start_tms,'DD/MM/YYYY') as dates,count(*) AS 
ecommerce
from ft_t_wcs1 wcs1 
join ft_t_stup stup
ON stup.CROSS_REF_ID=wcs1.acct_id
where stup.modl_id='ECOMMERC' and stup.end_tms is null wcs1.scenario='CREATE' and wcs1.acct_id is not null and 
wcs1.start_tms between add_months(TRUNC(SYSDATE,'mm'),-1) and 
LAST_DAY(add_months(TRUNC(SYSDATE,'mm'),-1))
group by to_char(wcs1.start_tms,'DD/MM/YYYY')
order by to_char(wcs1.start_tms,'DD/MM/YYYY');

Трудно предложить ответ, не понимая отношения между таблицами, но я могу сказать, что ваша проблема в том, что нет связи между вашим подзапросом и вашим основным запросом. Ваш подзапрос просто возвращает счетчик, где modl_id='ECOMMERC', так что это значение всегда будет одинаковым - в вашем случае 105. Вам нужно добавить критерий JOIN к подзапросу, который связывает уникальное значение с вашим основным запросом. Вы также захотите изменить псевдонимы для имен таблиц, чтобы обеспечить правильное присоединение.

Вы выполняете ненужные соединения, когда вам просто нужен коррелированный подзапрос:

SELECT to_char(wcs1.start_tms,'DD/MM/YYYY') as dates,
       (SELECT count(*) 
        FROM ft_t_stup stup 
        WHERE stup.modl_id=  'ECOMMERC' AND
              stup.CROSS_REF_ID = wcs1.acct_id
              stup.end_tms IS NULL
       ) AS ecommerce
FROM ft_t_wcs1 wcs1
WHERE wcs1.scenario = 'CREATE' AND
      wcs1.acct_id IS NOT NULL AND
      wcs1.start_tms BETWEEN add_months(TRUNC(SYSDATE,'mm'),-1) AND LAST_DAY(add_months(TRUNC(SYSDATE,'mm'),-1))
GROUP BY to_char(wcs1.start_tms, 'DD/MM/YYYY')
ORDER BY to_char(wcs1.start_tms, 'DD/MM/YYYY');

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