Как выполнить запрос MAX (COUNT (*))? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть база данных, где у меня есть таблицы MenuItem, Item, Item_Details и Item_Category. Я хотел бы получить элемент, который наиболее часто используется в меню.

SELECT 
  ItemName, 
  Category, 
  ItemPrice
FROM 
  restuarant.Menu_Item, 
  restuarant.Item, 
  restuarant.Item_Details, 
  restuarant.Item_Type
WHERE ItemId = Id_Item 
AND ItemTypeId = Id_ItemType 
AND ItemDetailsId = Id_ItemDetails 
AND ItemId = 
  (SELECT ItemId                                                                     
     FROM restuarant.Menu_Item
     HAVING COUNT(ItemId) = 
       (SELECT MAX(COUNT(ItemId))
        FROM restuarant.Menu_Item
        GROUP BY Id_MenuItem);

Итак, проблема в том, что я неправильно выполняю свои подзапросы, я получаю сообщение об ошибке «Невозможно выполнить статистическую функцию для выражение, содержащее агрегат или подзапрос. '

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

Пример 1:

select aic.County, count(*) from Address_Information_County aic
group by aic.County
having count(*) = (select top 1 count(*) from Address_Information_County group by County order by count(*) desc);

Пример 2:

select aic.County, count(*) from Address_Information_County aic
group by aic.County
having count(*) = (select max(cnt) from (select count(*) cnt from Address_Information_County group by County) x);
0 голосов
/ 25 февраля 2020

Как насчет следующего:

SELECT TOP (1) ItemId,  COUNT(ItemId) AS MCOUNT
FROM            Menu_Item
GROUP BY ItemId
ORDER BY  COUNT(ItemId) DESC
0 голосов
/ 25 февраля 2020

Вы можете использовать агрегатную функцию «Группировать по» для достижения этой цели.

SELECT ItemID, count(*) as cnt
FROM restaurant r
GROUP BY r.ItemID
ORDER BY cnt desc
LIMIT 1;

В случае, если существует несколько записей, число которых совпадает с MaxCount, будет работать следующий запрос.

SELECT ItemID, count(*) as cnt
FROM restaurant r
GROUP BY r.ItemID
HAVING count(*) = 
(
SELECT count(*) as max_cnt
FROM restaurant r2
GROUP BY r2.ItemID
ORDER BY max_cnt desc
LIMIT 1
)
;
...