powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среднее значение по столбцу
19 сообщений из 19, страница 1 из 1
Найти среднее значение по столбцу
    #39263243
Locust1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Имеется запрос, возвращающий id пациента, дату обращения и сумму, уплаченную за услугу. Необходимо вывести средний чек по больнице в этот день, то есть общую сумму (3000р) поделить на 2 (кол-во пациентов). Пробовал писать подзапросы с конструкцией avg(sum(..)) и sum(..)/count(..), но пока добился только подсчета среднего по каждому человеку. Посоветуйте пожалуйста, как решить эту простую проблему

Код: plsql
1.
2.
3.
4.
select t1.service_price, t2.treatment_date, t2.patient_code
from services t1, filling_forms t2, service_list t3
where t2.filling_form_code=t3.filling_form_code and t1.service_code=t3.service_code
and t2.treatment_date='30.03.16';




...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263266
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locust1,

Код: plsql
1.
select 3000/2 from dual
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263275
Locust1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще у кого-нибудь есть идеи? Нужно что-то типа такого, только среднее по всему

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t5.service_price, t2.patient_code, t2.treatment_date, avg(t1.service_price)
from services t1, filling_forms t2, service_list t3, 
(select t1.full_name, t2.patient_code
from people t1, patients t2
where t1.people_code=t2.people_code) t4, 
(select t2.patient_code, t2.treatment_date, t1.service_price
from services t1, filling_forms t2, service_list t3
where t2.filling_form_code=t3.filling_form_code and t1.service_code=t3.service_code) t5
where t2.filling_form_code=t3.filling_form_code and t2.patient_code=t4.patient_code and t1.service_code=t3.service_code
and t5.patient_code=t2.patient_code and t2.treatment_date='30.03.16'
group by t2.treatment_date, t5.service_price, t2.patient_code;



...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263290
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locust1,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with hospital as (
	select date'1812-06-24' + trunc(level/10) as treatment_date,
			mod(level, 10) as patient_code,
			42 * dbms_random.value as patient_temperature
		from dual
		connect by level <= 100
)
select treatment_date,
		count(1) as patient_count,
		count(case when patient_temperature < 25 then null else 1 end) as alive_count,
		avg(patient_temperature)
	from hospital
	group by treatment_date
	order by 1
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263293
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, у тебя же не уникальные пациенты..
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with hospital as (
	select date'1812-06-24' + trunc(level/10) as treatment_date,
			mod(level, 10) as patient_code,
			42 * dbms_random.value as patient_temperature
		from dual
		connect by level <= 100
)
select treatment_date,
		count(1) as patient_count,
		count(case when patient_temperature < 25 then null else 1 end) as alive_count,
		sum(patient_temperature) / count(distinct patient_code) as average_temperature
	from hospital
	group by treatment_date
	order by 1

...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263304
Locust1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--,
Похоже больше на шутку про Кутузова, но свалим это на мои скудные знания
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263388
Neuromatik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WITH aa as (
SELECT t1.service_price, t2.treatment_date, t2.patient_code
FROM services t1, filling_forms t2, service_list t3
WHERE t2.filling_form_code=t3.filling_form_code AND t1.service_code=t3.service_code
AND t2.treatment_date='30.03.16')

SELECT aa.treatment_date,
sum(aa.service_price)/ (SELECT count(*) FROM (SELECT DISTINCT a1.patient_code FROM aa a1)) avg_sum,
FROM aa
GROUP BY aa.treatment_date
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263409
sum(бабло)/ nullif(count(distinct пациент),0)
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263429
Neuromatik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправил с учетом вышенаписанного

SELECT sum(t1.service_price) / count(DISTINCT t2.patient_code) avg_sum
FROM services t1, filling_forms t2, service_list t3
WHERE t2.filling_form_code=t3.filling_form_code AND t1.service_code=t3.service_code
AND t2.treatment_date='30.03.16'
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263435
Locust1,

на выходе результат как должен выглядеть? в виде одной строки с датой и значением среднего чека на эту дату?
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263436
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locust1,

А если у одного пациента в этот день 2 чека было? Тогда все вычисление перекосится
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263444
Locust1,

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select MAX(MAX(t2.treatment_date)) AS DT
     , AVG(SUM(t1.service_price)) AVG_SUM
  from services t1
     , filling_forms t2
     , service_list t3
 where t2.filling_form_code = t3.filling_form_code 
   and t1.service_code = t3.service_code
   and t2.treatment_date = '30.03.16'
 GROUP BY t2.patient_code;
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263445
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaldoreyА если у одного пациента в этот день 2 чека было? Тогда все вычисление перекосится Читайте ТЗ внимательнее. Там ровно два чека у одного пациента.
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263556
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр,

Не совсем. Сказано: "вывести средний чек по больнице в этот день, то есть общую сумму (3000р) поделить на 2 (кол-во пациентов)"
Средний чек = сумма по всем чекам/количество чеков.
2 - это должно быть не кол-во пациентов - а количество чеков- независимо, тот же пациент покупает или другой.
Добрый Э - Эх написал уже по делу, осталось только понять, соответствует ли filling_forms к чеку 1 к 1, или это просто разные формы заполнения, например одна для операций, а другая для оплаты палаты и лекарств для восстановления, а в чеке общим пробьют.
А так то конечно то еще скотство. Наглядное свидетельство того, что побольше лечения втюхать, а не вылечить по совести
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39263996
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, картинки то у меня не подгружались тогда, будто у меня их и не было, без них по другому воспринимается, сори
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39264267
Locust1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем большое, в итоге всё так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t1.service_price, t2.treatment_date, t2.patient_code, t4.avg_sum
from services t1, filling_forms t2, service_list t3,
(
SELECT t2.treatment_date, sum(t1.service_price) / count(DISTINCT t2.patient_code) avg_sum
FROM services t1, filling_forms t2, service_list t3
WHERE t2.filling_form_code=t3.filling_form_code AND t1.service_code=t3.service_code
group by t2.treatment_date
) t4
where t2.filling_form_code=t3.filling_form_code and t1.service_code=t3.service_code and t4.treatment_date=t2.treatment_date
and t2.treatment_date='30.03.16';



...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39264338
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locust1,

ппц...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select t1.service_price, t2.treatment_date, t2.patient_code, t4.avg_sum
from services t1, filling_forms t2, service_list t3,
(
SELECT t2.treatment_date, sum(t1.service_price) / count(DISTINCT t2.patient_code) avg_sum
FROM services t1, filling_forms t2, service_list t3
WHERE t2.filling_form_code=t3.filling_form_code AND t1.service_code=t3.service_code  AND t2.treatment_date='30.03.16' 
group by t2.treatment_date
) t4
where t2.filling_form_code=t3.filling_form_code and t1.service_code=t3.service_code and t4.treatment_date=t2.treatment_date
and t2.treatment_date='30.03.16';
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39264413
Daniil1993
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну или

Код: plsql
1.
2.
3.
4.
select 
(select sum(столбец) from таблица where date=нужная) --общая сумма за требуемую дату
/(select count(столбец) from таблица where date=нужная) --количество людей/чеков чего нужно можно distinct добавить при надобности
from dual
...
Рейтинг: 0 / 0
Найти среднее значение по столбцу
    #39264461
Daniil1993ну или

Код: plsql
1.
2.
3.
4.
select 
(select sum(столбец) from таблица where date=нужная) --общая сумма за требуемую дату
/(select count(столбец) from таблица where date=нужная) --количество людей/чеков чего нужно можно distinct добавить при надобности
from dual

на нагруженной системе из дуала все строки выберут и запрос перестанет возвращать значения.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среднее значение по столбцу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]