Вывод GROUP BY записей с ASC сортировкой

262
28 июля 2017, 01:13

Есть таблица test.

Мне нужно вытащить одну строку, группировка по сумме (amount), но если есть is_read=0 - то выводить именно эту строку.

Пробовал так

SELECT id, is_read FROM test GROUP BY amount ORDER BY is_read ASC;

Выводит только первую строку

Как вывести так, чтобы выводилось сортируя по is_read=0?

Чтобы был результат такой:

id=3, is_read=0
Answer 1

вот таким образом:

select id, is_read, amount from test group by amount, is_read
order by amount, is_read
limit 1

http://sqlfiddle.com/#!9/e5de99/4

Answer 2

GROUP BY возвращает строку, какую ему вздумается, в итоге ты можешь получить в выборке какой угодно id. Если у тебя is_read = 0 имеет 50 записей, и идентификаторы этих записей 4,5,6,7,8 и т.д. то GROUP BY будет возвращать постоянно разные их значения. потому что It's indeterminate which row will be returned. MySQL is free to return values from any row in the group.

Answer 3
select *, (select id from test t2 where t1.amount=t2.amount)  
and t2.is_read=mp limit 1) id
from 
(select amount, min(is_read) mp from test group by amount) t1
READ ALSO
Когда нужен lazy loading связаных сущностей в Hibertate?

Когда нужен lazy loading связаных сущностей в Hibertate?

Есть несколько связанных сущностейУ сущности Propose в виде поля есть User

257
Что такое JavaTexField [требует правки]

Что такое JavaTexField [требует правки]

напишите пример JTextField пожалуйстаJava

285
Как внедрить свою реализацию бд в Openfire?

Как внедрить свою реализацию бд в Openfire?

Здравствуйте, подскажите, пожалуйста, открыл для себя новый протокол XMPPВ частности начал изучать реализующей его Openfire

267