SQL - изберете колона, ако сумата на другите колони е над общата

Имам таблица, която изглежда така:

id , name , price , date

1    a      100      1.3.12
2    b      230      1.3.12
3    a      300      1.3.12
4    c      1000     1.3.12
5    b      160      1.3.12
6    a      400      1.3.12

Искам да покажа имената, чиято обща цена е над някаква стойност, да кажем 500. Така че, ако a има 100, 300, 400, тогава общата му цена е 800 > 500 -> показване.

Но искам да го направя само с едно запитване. Досега успях да получа тази заявка:

SELECT name SUM (price) AS total FROM table GROUP BY name

Но тогава трябва да направя още едно, за да избера общо > 500.

Как го правя? Благодаря ви предварително.


person Ran Eldan    schedule 29.06.2013    source източник
comment
хаха да, но няма значение   -  person Ran Eldan    schedule 30.06.2013


Отговори (2)


Трябва да използвате клауза HAVING, за да приложите условие към агрегирана функция:

SELECT   name
FROM     yourtable
GROUP BY name
HAVING   SUM(price)>500
person fthiella    schedule 29.06.2013

Използвайте having за филтриране

select name, sum(price) as total_price
from your_table
group by name
having total_price > 500
person juergen d    schedule 29.06.2013
comment
Това не е стандартно и най-вероятно не се поддържа широко. (MySQL е единственият продукт от този вид, който идва на ум.) - person Andriy M; 08.07.2013
comment
Съжалявам, току-що осъзнах, че коментарът ми може да изглежда неясен (ако не на вас, то на някой друг). Нестандартното нещо, за което говорех, беше вашето препращане към псевдонима total_price в клаузата having. - person Andriy M; 12.07.2013