Проблем:
Искате да намерите групи от редове с определен брой записи в група.
Пример:
Нашата база данни има таблица с име product
с данни в следните колони:id
, name
и category
.
id | име | категория |
---|---|---|
1 | диван | мебели |
2 | ръкавици | дрехи |
3 | Тениска | дрехи |
4 | стол | мебели |
5 | бюро | мебели |
6 | гледайте | електроника |
7 | фотьойл | мебели |
8 | пола | дрехи |
9 | радиоприемник | електроника |
Нека намерим категорията продукти с повече от два записа.
Решение:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Ето резултатите:
категория | брой |
---|---|
мебели | 4 |
дрехи | 3 |
Дискусия:
За да филтрирате записи според дадения брой редове в групата, използвайте клаузата HAVING. Той филтрира редове, използвайки в агрегатна функция за условие като COUNT. Първо, в SELECT, използвайте името на колона или колони, за да групирате редове (това е категория в нашия пример), след това поставете агрегатната функция COUNT, която изчислява броя на записите във всяка група. За да преброите броя на редовете, използвайте колоната id, която съхранява уникални стойности (в нашия пример използваме COUNT(id)
). След това използвайте клаузата GROUP BY, за да групирате записи според колони (GROUP BY
категория по-горе). След като използвате GROUP BY за филтриране на записи с агрегатни функции като COUNT, използвайте клаузата HAVING. Винаги се използва след клаузата GROUP BY. В HAVING използваме условие, за да сравним стойност с такава, върната от агрегатната функция. В примера сравняваме дали COUNT(id) връща стойност, по-висока от две. Ако е истина, категорията се връща с броя на продуктите.