Как считать группы строк и отобразить вершину/нижнюю часть 3

Я понимаю, что это, вероятно, будет легким, но мой SQL является основным в лучшем случае

Позволяет говорят, что у меня есть таблица, содержащая список заказов, с item_id будучи одним из столбцов. Я должен отобразиться 3 наименьшее количество (или 3 большинство) популярные заказы объекта.

Я знаю, что должен сгруппировать использование заказов item_id и затем считайте их. Затем я должен отобразить нижнюю часть (или вершина) 3 в убывании (или возрастание) порядок. Я просто не совсем уверен, как создать запрос как этот.

8
задан ekad 27 January 2017 в 01:46
поделиться

4 ответа

В Sql Server:

SELECT TOP 3 item_id, COUNT(*) as itemcount 
FROM table 
GROUP BY item_id ORDER BY itemcount

И добавьте DESC к порядковому убыванию

11
ответ дан 5 December 2019 в 08:52
поделиться

Вы можете просто использовать «источник» в клиенте mysql:

source dumpfile.sql

Или предоставить непосредственно из командной строки:

mysql -u user -p password database < source dumpfile.sql

Это потому, что результатом mysqldump является только файл SQL, который можно запустить через mysql как обычно.

-121--1549188-

Нет, но есть Объекты дерева AVL для Python (очень старые!) и (закрытый) проект на SourceForge - avl-trees для Python .

-121--929716-
select item_id, count(*)
from table
group by item_id;

даст вам весь список.

Нижняя 3:

select item_id
from (
    select item_id, count(*) as cnt
    from table
    group by item_id
    order by cnt
) where rownum < 4;

Верхняя 3:

select item_id
from (
    select item_id, count(*) as cnt
    from table
    group by item_id
    order by cnt desc
) where rownum < 4;

ПРИМЕЧАНИЕ: этот sytnax предназначен для Oracle. Используйте LIMIT, если у вас есть MySQL или TOP, если у вас есть sql-сервер.

ORDER BY отсортирует результаты. Порядок возрастания по умолчанию, поэтому используйте desc, если вы хотите получить наибольший.

GROUP BY (при использовании с count (*)) подсчитывает группы похожих объектов

, где rownum < 4: Это оракулы для выполнения LIMIT. Он возвращает первые 3 строки выполненного запроса. Где предложения выполняются перед предложениями заказа, поэтому необходимо выполнять это как вложенный запрос.

3
ответ дан 5 December 2019 в 08:52
поделиться

Для SQL сервера:

select    top 3 item_id, count(item_id) 
from      table 
group by  item_id 
order by  count(item_id) desc

даст вам 3 самых популярных item_id's

используя:

order by  count(item_id) 

даст вам 3 наименее популярных item_id's

3
ответ дан 5 December 2019 в 08:52
поделиться

В MySQL :

SELECT  item_id, COUNT(*) AS cnt
FROM    orders
GROUP BY
        item_id
ORDER BY
        cnt DESC
LIMIT 3
2
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: