2015-02-24 3 views
1
sqlite> select sid,max(amount) from(select * from Am where year=2014); 
1,600 
sqlite> select sid from (select sid,max(amount) from(select * from Am where year=2014)); 
3 

Откуда 3? единственный вариант - 1 .. Что происходит? Спасибо.Проводной запрос sql

+1

Я не уверен, почему разница. Оба должны быть эквивалентны «SELECT sid, MAX (amount) FROM am WHERE year = 2014« Нет причин осложнять это. – JNevill

+0

Мне нужна только колонка sid. вы правы, я могу его сократить. но почему результат отличается от возможностей? – Signer3

+0

Тогда зачем агрегировать? – JNevill

ответ

3

select sid, max(amount) кажется, не очень хорошо определены. Я думаю, вы предполагаете, что это даст вам сид для строки, которая имеет максимальную сумму, я не думаю, что это допустимое предположение.

Я хотел бы написать это как

select sid from Am where year = 2014 
and amount = (select max(amount) from Am where year = 2014) 

, который может возвращать несколько строк, если есть галстук на максимальную сумму.

+0

Конечно, это могло бы возвратить несколько строк с одинаковой суммой ... Я бы пошел с 'select top 1 sid from Am, где год = 2014 порядка по количеству desc'. – Luaan

+0

@ Luann, да, он может возвращать несколько строк. но я не уверен, что OP хочет только одного. –

1

Теперь вы знаете, что означает неопределенное, если вы не собираете агрегат, вам нужно группировать его, другие базы данных даже не разрешают эту операцию. Предположим, у вас есть эти значения:

sid amount 
1 600 
1 500 
3 400 
3 200 

select sid,max(amount) from t 

возвращает неопределенное значение из ИДС и 600 для MAX.Sid может быть правильным или не может, то `s какие неопределенные средства, потому что у Вас нет никакого контроля на что column.A собственно запрос будет

select sid,max(amount) from t where year = 2014 GROUP BY sid 

Или

select max(amount) from t 
Смежные вопросы