В Sqlite 3 я пытаюсь выяснить, как выбирать строки на основе минимального значения. Я думаю, что я ограничен тем, что не знаю достаточно терминологии для эффективного поиска в Google.
Стол выглядит так:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Я хочу получить строки, где num2
есть 1, 2
, и 4
. Я хочу сделать выбор на основе минимального значения num для каждого уникального значения текстового столбца.
Итак, для text = 'a'
, минимальное значение num
равно 0
, поэтому я хочу строки 1 и 2. Для text = 'b'
, минимальное значение num
равно 1
, поэтому я хочу строки 4
.
Используя различные комбинации группы по, я могу получить или строки 1
и 2
или строку 1
и 4
. Я чувствую, что мне не хватает компонента SQL, который будет делать то, что я хочу, но я не смог понять, что это может быть.
Как правильно сделать этот тип запроса?
Возможное решение
Я нашел в способ сделать это. Я не достаточно авторитетный, чтобы ответить на свой вопрос, поэтому я делаю обновление здесь. Я не уверен, всегда ли это правильно или какова эффективность. Любые комментарии приветствуются.
Я использовал составной оператор выбора, где один запрос находит минимальное значение num для каждого уникального значения текста:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Затем я соединил это с полной таблицей, чтобы получить все строки, соответствующие этим двум столбцам.
sqlite> with u as
( select num, text from t group by text having num = min( num ) )
select t.* from t join u on t.num = u.num and t.text = u.text;
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 b 4