У меня есть такая колонка
total name gender
2 Mike male
2 Dion male
2. Shinta female
2 Sarah female
10 Pio male
10 Olive female
10 Steve male
80 Yuri female
80 Kio male.
80 Doni male
80 Dora female
80 Nobi male.
80 Hiou male
как ограничить каждую сумму только 2 человека ?? Я получил эту таблицу из созданного представления и присоединения к ней и получил эту таблицу, но если я ограничу, она ограничит только первую строку сверху, но не каждую общую сумму Я очень хочу получить каждый тотал 2 с 2 человека, и всего 10 получится 2 человека, а 80 получится 2 человека, это возможно???
sqlite, извини :D


Для этого часто используются оконные функции:
select t.*
from (select t.*, row_number() over (partition by total order by total) as seqnum
from tempview t -- or whatever your logic is here
) t
where seqnum <= 2;
Конечно, оконные функции доступны только в самых последних версиях SQLite.
В старых версиях SQLite это болезненно, но это должно работать:
select t.*
from tempview t
where t.name in (select t2.name
from tempview t2
where t2.total = t.total
limit 2
);
Это предполагает, что имена не повторяются для данного total.
что значит т.* ??
@поппоп . . . Он выбирает все столбцы из подзапроса или таблицы, которым был назначен псевдоним таблицы t.
мой sqlite3 самый последний я думаю
@поппоп . . . Оконные функции были добавлены в SQLite 3.25.0. Если вы используете этот выпуск или более позднюю версию, версия row_number() должна работать.
Я уже создал эту таблицу выше как VIEW, а таблица имен - tempView, а затем я копирую вашу команду, все еще синтаксическая ошибка рядом с "(": синтаксическая ошибка
Вы правы, как обновить новейшую версию sqlite3?
Я обновился с помощью npm, но все еще использую старую версию :(
Вы можете попробовать использовать row_number()
select * from
(
select *, row_number() over(partition by total order by null) as rn
from tablename
)A where rn<=2
Быстрая пушка +1. Вы опередили Гордона на 6 секунд.
какой смысл А после) ??
Я думаю, order by null выдаст ошибку. order by (SELECT NULL) будет работа
@poppop, A означает имя временной таблицы этого подзапроса, обычно записывается как «как A».
Вы используете MS SQL Server или SQLite?