Как совместить select max и count?

У меня есть это:

select ordernr 
from users 
having count(ordernr) = 
( select max(count(ordernr)) 
    from users where ordernr = ordernr 
    group by ordernr ) 
group by ordernr

чтобы получить наиболее часто используемый порядковый номер (ordernr) от всех пользователей.

Как добавить его в систему ABAP SAP? Я пробовал это:

select SINGLE ordernr 
from ZDEVXXX_PROJECT3 INTO ordernrU 
having count( * ) = 
( select max( count( * ) ) 
    from ZDEVXXX_PROJECT3 
    where ordernr = ordernr 
    group by ordernr )

Но я получаю такую ​​ошибку:

"Unknown columnname COUNT("

Как совместить макс и счет в ABAP? Приведенный выше SQL-запрос работает для меня в Oracle. Спасибо!


person T D    schedule 27.06.2010    source источник
comment
Техника агрегирования SQL, которую вы ищете, называется PARTITION BY и не поддерживается SAP OpenSQL в R / 3. Вам, вероятно, нужен код ABAP, и вы не можете решить его только с помощью SQL, по крайней мере, в читаемой форме.   -  person konstantin    schedule 05.11.2019


Ответы (3)


Вам необходимо иметь COUNT (*) в наборе результатов, если вы хотите использовать его в предложении HAVING. См. http://help.sap.com/abapdocu_751/en/ABENWHERE_LOGEXP_ALL_ANY_LOGEXP_ALL_ANY_LOGEXP_ALL_ANY_ a> для примера.

person vwegert    schedule 27.06.2010

Начиная с версии 6.1 вы можете использовать агрегаты в предложении HAVING. Но ваш ответ - «Ни за что». Агрегаты должны быть только в форме aggr( {[distinct] column | *} ) Поэтому вы должны

select count( * )
    into table itab
    from ZDEVXXX_PROJECT3 
    where ordernr = ordernr 
    group by ordernr

Затем программно найти максимум отсчетов. И только потом использовать его в состоянии ИМЕТЬ.

person Odomontois    schedule 11.08.2010

Или вы можете использовать ABAP Open SQL. Это дает вам доступ к SQL вашей конкретной БД, и вы можете выполнить упомянутый выше запрос.

person Konstantin Milyutin    schedule 22.08.2010
comment
Вы, вероятно, имеете в виду Native SQL, и НЕТ, это НЕ подход, который следует использовать при разработке приложений. - person vwegert; 03.11.2016
comment
И если вам наплевать на людей, которым придется поддерживать ЦЕНЗУРИРОВАННОЕ, которое вы оставили, то да. - person vwegert; 03.11.2016
comment
Я предложил верный подход. Есть собственный SQL, он специфичен для БД, но иногда работает там, где нет ABAP SQL. Я бы не стал использовать такие фразы, как XYZ - это не подход, который следует использовать при разработке приложений, это не вам решать. Некоторые люди могут возразить, что ABAP - это не подход к разработке. - person Konstantin Milyutin; 03.11.2016