Как ограничить каждую строку в общем столбце sql?

У меня есть такая колонка

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 человека, это возможно???

Вы используете MS SQL Server или SQLite?

jarlh 18.03.2019 15:01

sqlite, извини :D

poppop 18.03.2019 15:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
50
2

Ответы 2

Для этого часто используются оконные функции:

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.

что значит т.* ??

poppop 18.03.2019 15:07

@поппоп . . . Он выбирает все столбцы из подзапроса или таблицы, которым был назначен псевдоним таблицы t.

Gordon Linoff 18.03.2019 15:08

мой sqlite3 самый последний я думаю

poppop 18.03.2019 15:21

@поппоп . . . Оконные функции были добавлены в SQLite 3.25.0. Если вы используете этот выпуск или более позднюю версию, версия row_number() должна работать.

Gordon Linoff 18.03.2019 15:25

Я уже создал эту таблицу выше как VIEW, а таблица имен - tempView, а затем я копирую вашу команду, все еще синтаксическая ошибка рядом с "(": синтаксическая ошибка

poppop 18.03.2019 15:27

Вы правы, как обновить новейшую версию sqlite3?

poppop 18.03.2019 15:38

Я обновился с помощью npm, но все еще использую старую версию :(

poppop 18.03.2019 15:45

Вы можете попробовать использовать row_number()

select * from
(
select *, row_number() over(partition by total order by null) as rn
from tablename
)A where rn<=2

Быстрая пушка +1. Вы опередили Гордона на 6 секунд.

Tim Biegeleisen 18.03.2019 15:04

какой смысл А после) ??

poppop 18.03.2019 15:07

Я думаю, order by null выдаст ошибку. order by (SELECT NULL) будет работа

Arulkumar 18.03.2019 15:07

@poppop, A означает имя временной таблицы этого подзапроса, обычно записывается как «как A».

Hasan Mahmood 18.03.2019 15:10

Другие вопросы по теме