Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Count, avg  [new]
Bernard2021
Member

Откуда:
Сообщений: 4
Добрый день,
Есть две таблицы: projects (id, name) и details(project_id, project_days), необходимо найти по каждому name среднее количество дней и общее количество проектов вообще.

Я думаю что это довольно легко, но я полный новичок :)
27 апр 21, 10:10    [22314915]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
123йй
Member

Откуда:
Сообщений: 1675
Bernard2021,

начните с Joins
27 апр 21, 10:22    [22314922]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Bernard2021
Member

Откуда:
Сообщений: 4
123йй,

объединяя таблицы, среднее работает а count выдает неправильно
27 апр 21, 10:28    [22314929]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7253
Bernard2021
123йй,

объединяя таблицы, среднее работает а count выдает неправильно


Не верю :)

памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
-- query sample
select
-- level
-- ,u.user_name
-- ,p.message
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;


3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение
27 апр 21, 11:44    [22314973]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 3022
Bernard2021
123йй,

объединяя таблицы, среднее работает а count выдает неправильно


как должен выглядеть результат?

.....
stax
27 апр 21, 11:51    [22314981]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Bernard2021
Member

Откуда:
Сообщений: 4
Stax,

projects
id name
1 A
2 B
3 A
4 A
5 C
6 C

details
project_id project_days
1 10
1 40
5 80
5 20

итоговая таблица должна быть
name AVG COUNT
A 30 3
B - 1
C 50 2

К сообщению приложен файл. Размер - 8Kb
27 апр 21, 13:07    [22315029]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 3022
Bernard2021,

SQL> ed
Wrote file afiedt.buf

  1  with projects(id, name) as (
  2    select 1,'A' from dual union all
  3    select 2, 'B' from dual union all
  4    select 3, 'A' from dual union all
  5    select 4, 'A' from dual union all
  6    select 5, 'C' from dual union all
  7    select 6, 'C' from dual)
  8  ,details(project_id,project_days) as (
  9    select 1, 10  from dual union all
 10    select 1, 40 from dual union all
 11    select 5, 80 from dual union all
 12    select 5, 20 from dual)
 13  select
 14    name
 15   ,avg(project_days) avg_d
 16   ,count(distinct id) cc
 17  from projects p ,details d
 18  where p.id=d.project_id(+)
 19  group by name
 20* order by 1
SQL> /

N      AVG_D         CC
- ---------- ----------
A         25          3
B                     1
C         50          2

SQL>
SQL> /

N      AVG_D         CC
- ---------- ----------
A         25          3
B                     1
C         50          2


.....
stax
27 апр 21, 13:40    [22315061]     Ответить | Цитировать Сообщить модератору
 Re: Count, avg  [new]
Bernard2021
Member

Откуда:
Сообщений: 4
Stax,
Спасибо 🙏
Теперь знаю что такое distinct
27 апр 21, 14:04    [22315079]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить