Невозможно использовать оконную функцию count при наличии оператора - PullRequest
1 голос
/ 04 марта 2020

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

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

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

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

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

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
1 голос
/ 04 марта 2020
SELECT {fieldset}
FROM {tableset}
WHERE {conditions-1}
GROUP BY {expression-1}
HAVING {conditions-2}
   AND {expression-2} = COUNT({expression-3}) OVER ({window})

Оконная функция применяется к выходному набору данных, но изменяет ее. Таким образом, оконная функция не может быть использована в 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`
...