2013-04-17 2 views
4

Я хочу использовать группу, на одной колонке, которая оказывает большое количество записейКак использовать группу по одному столбцу, который имеет много записей?

TABLE_A

Name price 
AAA 12 
BBB 13 
AAA 0 
CCC 24 
AAA 0 
DDD 0 

Теперь я хочу, чтобы выяснить Name, которая оказывает Price в 0

но, как я с записями AAA 3 раза Я не могу напрямую написать простой sql с условием NOT Equal to 0

Пожалуйста, помогите мне, я хочу, чтобы распечатать результат для выше TABLE_A должен быть

только D как это оказывает 0 как price.

ответ

2

Вы можете achive это с помощью агрегатных функций GROUP BY и HAVING пункт:

SQLFiddle Demo

SELECT name,SUM(price) as price 
FROM table 
GROUP BY name 
HAVING SUM(price) = 0 
+0

nice logic dude – Freelancer

+0

Спасибо! @OP: Если у вас есть отрицательные значения для цены, используйте 'MAX' вместо' SUM' – Omesh

+2

, но что произойдет, если AAA будет иметь первое значение 5, а далее - -5 ... его сумма будет равна нулю – Freelancer

3

Я предположил, цена не может быть ниже нуля:

SELECT Name 
FROM TableName 
GROUP BY Name 
HAVING SUM(price) = 0 

Или с дополнительным условием только одна цена, которая равна нулю

SELECT Name 
FROM TableName 
GROUP BY Name 
HAVING COUNT(*) = 1 AND SUM(price) = 0 
+0

Я считаю, что это правильный ответ, как сказал OP только 'd', как это имеет приз, равный нулю. Поэтому OP нужны только те, у кого есть нулевая цена, и у них есть только одна запись. Разумеется, иначе. –

+0

только второй запрос совершенный (вот что я думаю) – Freelancer

1
select name,max(price) as price from table group by name having max(price) =0 
1
select name,max(price) 
group by name 
having max(price)=0 
Смежные вопросы