2010-02-19 13 views
8

Rozumiem, że to będzie najprostsze, ale mój SQL jest w najlepszym razie podstawowy.Jak liczyć grupy wierszy i wyświetlić górną/dolną 3

Powiedzmy, że mam tabelę zawierającą listę zamówień, przy czym item_id jest jedną z kolumn. Muszę wyświetlić 3 najmniej (lub 3 najbardziej) popularne zamówienia przedmiotu.

Wiem, że muszę zgrupować zamówienia za pomocą item_id, a następnie je policzyć. Następnie muszę wyświetlić dolną (lub górną) 3 w porządku malejącym (lub rosnącym). Po prostu nie jestem do końca pewien, jak skonstruować takie zapytanie.

+0

Mój angielski nie jest dla mnie za mało, aby zrozumieć "3 najpopularniejsze rozkazy pozycji". Czy to tylko ja? – Quassnoi

+0

Nie tylko ty. Myślę, że PO miał na myśli coś w stylu: "Muszę wyświetlić trzy najbardziej uporządkowane przedmioty". – bernie

+1

Witamy w StackOverflow. –

Odpowiedz

10

W SQL Server:

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

I dodać DESC zamówić zejście

3
select item_id, count(*) 
from table 
group by item_id; 

da ci całą listę.

Dół 3:

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

Top 3:

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

UWAGA: ten sytnax jest dla Oracle. Użyj LIMIT, jeśli posiadasz MySql lub TOP, jeśli masz serwer sql.

ORDER BY sortuje wyniki. Kolejność rosnąca jest domyślna, więc użyj "desc", jeśli chcesz zdobyć największy.

GROUP BY (gdy jest stosowany z count (*)) będzie liczyć grupy podobnych obiektów

gdzie rownum < 4: Jest wyrocznie było robić LIMIT. Zwraca pierwsze 3 wiersze kwerendy, które zostały uruchomione. Gdzie klauzule są uruchamiane przed klauzulami zleceń, dlatego właśnie musisz to zrobić jako zapytanie zagnieżdżone.

+0

Dlaczego w dół bez komentarza? –

+0

@quassnoi: zredagowaliśmy to w tym samym czasie: przywróciłem twoje zmiany, a następnie umieściłem je razem z kopalni, aby tekst, który dodałem, był tam. –

2

W MySQL:

SELECT item_id, COUNT(*) AS cnt 
FROM orders 
GROUP BY 
     item_id 
ORDER BY 
     cnt DESC 
LIMIT 3 
3

Na serwerze SQL:

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

daje 3 najpopularniejszą item_id na

używając:

order by count(item_id) 

daje 3 najmniej p opular item_id na

+0

Do czego służy ta dbms? –

+0

@David: 'SQL Server' – Quassnoi

Powiązane problemy