Задачка. Подсчет количества "интересных ячеек"

В этом форуме обсуждаем общие вопросы и проблемы языка, решаем задачи на разных диалектах, делимся успехами и неудачами его применения.

Модератор: rozhnev

Аватара пользователя
SQL*Plus
Сообщения: 352
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: Задачка. Подсчет количества "интересных ячеек"

Сообщение SQL*Plus »

Unanonimized писал(а): Сб фев 15, 2025 1:13 pm По ходу нет тут никого...
Ладно, балуемся дальше :)

Код: Выделить всё

with t as(
  select id, a,b,c,d,e,f, (a+b+c+d+e+f)/6 row_avg from task_09)
, t2 as(
  select id, col, val, case when row_avg < val then 1 end f3 from t
  unpivot( val for col in (A,B,C,D,E,F)))
, t3 as (
select *  from t2
 model
 dimension by (id, col, val)
 measures(f3 f_interest)
 rules ( f_interest[any,any,any] = case when 1 = f_interest[cv(),cv(),cv()]
                                   and 1 = count(1)[cv(),any,cv()] 
                                   and 330 < count(1)[any,cv(),cv()]
                                  then 1 end))
select count(count(f_interest)) from t3 group by id
having count(f_interest) = 1
"Моделька" отработала.
Результат правильный:

Код: Выделить всё

COUNT(COUNT(F_INTEREST))
------------------------
                    4175
Elapsed: 00:11:52.236
Время выполнения 11:52. Впечатляет! :-)))

P.S. "Я могла бы найти ещё более запутанный способ, как это сделать", - сказала Белая Королева
(с) Алиса в Зазеркалье
:-)
Последний раз редактировалось SQL*Plus Сб фев 15, 2025 7:37 pm, всего редактировалось 1 раз.
Аватара пользователя
SQL*Plus
Сообщения: 352
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: Задачка. Подсчет количества "интересных ячеек"

Сообщение SQL*Plus »

Предлагаю авторам решений давать этим решениям названия-псевдонимы.
Так нам будет проще на них указывать / к ним обращаться.

Например, "Решение с моделькой". "Нерешение с лишними вспомогательными таблицами", и т.п.
Аватара пользователя
SQL*Plus
Сообщения: 352
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: Задачка. Подсчет количества "интересных ячеек"

Сообщение SQL*Plus »

Unanonimized писал(а): Сб фев 15, 2025 1:13 pm

Код: Выделить всё

with t as(
select a a330,b b330,c c330,d d330,e e330,f f330
  from task_09
 group by grouping sets((a),(b),(c),(d),(e),(f))
 having count(*) > 330
)
. . .
Назовем это "Решение с групингом"

Результат получился правильный.
Пока это самое короткое время расчета.
Аватара пользователя
SQL*Plus
Сообщения: 352
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: Задачка. Подсчет количества "интересных ячеек"

Сообщение SQL*Plus »

Frolwww писал(а): Сб фев 15, 2025 5:20 pm Ладно вот вам 1 sql

Код: Выделить всё

SELECT COUNT(*) 
FROM (
    SELECT n.row_id
    FROM normalized_table n
. . .
Не засчитано.

Постановка задачи не предполагает создание новых таблиц.
Ответить