Невозможно использовать оконную функцию count в инструкции

Я новичок в MYSQL, и я пытаюсь проверить количество данных с одинаковым именем из 2 столбцов, которые встречаются более одного раза, и я уже пытаюсь использовать оператор «имеющий» в этом случае, и это бросает меня такая ошибка Error Code: 3593. You cannot use the window function 'count' in this context.' ниже. Я добавляю изображение того, что я пытаюсь сделать скриншот рабочей среды mysql

вы можете увидеть там столбец с именем «number_of_same_year», представляющий вывод «COUNT OVER PARTITION», в котором есть числа, которые логически могут быть проверены. Я только хочу показать, где числа выше 1 (что означает, что они встречаются более одного раза)

PS: я использую MySQL в Windows 10


person Foggy Minded Greenhorn    schedule 04.03.2020    source источник
comment
Я также не могу использовать оператор where. так что похоже, что нет никакого способа проверить это   -  person Foggy Minded Greenhorn    schedule 04.03.2020
comment
Я считаю, что функции WINDOW разрешены только в предложении SELECT/ORDER.   -  person donut    schedule 04.03.2020


Ответы (2)


Вы не можете использовать наличие и оконную функцию. Вместо этого вы хотели бы сделать следующее

select * from (
select unit_name
       ,month(transaction_date)
       ,year(transaction_date) as year
       ,budget
       ,count(*) over(partition by unit_name,year(transaction_date)) as number_of_same_year
  from sql_advertising.history_transaction
  )x
where x.number_of_same_year >1
order by x.unit_name
person George Joseph    schedule 04.03.2020

SELECT {fieldset}
FROM {tableset}
WHERE {conditions-1}
GROUP BY {expression-1}
HAVING {conditions-2}
   AND {expression-2} = COUNT({expression-3}) OVER ({window})

Оконная функция применяется к выходному набору данных, но HAVING изменяет его. Таким образом, оконная функция не может использоваться в HAVING. Приведенный выше код недействителен.

Вы можете решить это:

WITH `cte` AS ( SELECT {fieldset}, 
                       {expression-2} = COUNT({expression-3}) OVER ({window}) AS `criteria`
                FROM {tableset}
                WHERE {conditions-1}
                GROUP BY {expression-1}
                HAVING {conditions-2} )
SELECT {fieldset}
FROM `cte`
WHERE `criteria`
person Akina    schedule 04.03.2020