/ / SQL: wybierz z tej samej tabeli i tej samej kolumny, tylko inne liczby - sql

SQL: wybierz z tej samej tabeli i tej samej kolumny, tylko różne liczby - sql

Mam stół o nazwie names, i chcę wybrać 2 nazwy po policzeniu (*) jako uniq, a następnie kolejne 2 nazwy tylko z całej puli próbek.

firstname
John
John
Jessica
Mary
Jessica
John
David
Walter

Tak więc pierwsze 2 nazwy wybiorą z puli John, Jessica, i Mary itp., co daje im równe szanse na wybranie, podczas gdy drugie 2 nazwiska wybiorą z całej puli, więc oczywiste odchylenie zostanie podane John i Jessica z wieloma rzędami.

Jestem pewien, że jest na to sposób, ale po prostu nie mogę tego rozgryźć. Chcę zrobić coś takiego

SELECT uniq.firstname
FROM (SELECT firstname, count(*) as count from names GROUP BY firstname) uniq
limit 2
AND
SELECT firstname
FROM (SELECT firstname from names) limit 2

czy to możliwe? Doceń wszelkie wskazówki.

Odpowiedzi:

0 dla odpowiedzi № 1

Myślę, że jesteś blisko, ale potrzebujesz losowości do próbkowania:

(SELECT uniq.firstname
FROM (SELECT firstname, count(*) as count from names GROUP BY firstname) uniq
ORDER BY rand()
limit 2
)
UNION ALL
(SELECT firstname
FROM from names
ORDER BY rand()
limit 2
)

0 dla odpowiedzi nr 2

Jak wspomniano tutaj możesz użyć RAND lub podobnych funkcji, aby to osiągnąć w zależności od bazy danych.

MySQL:

SELECT firstname
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname)
ORDER BY RAND()
LIMIT 2

PostgreSQL:

SELECT firstname
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname)
ORDER BY RANDOM()
LIMIT 2

Microsoft SQL Server:

SELECT TOP 2 firstname
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname)
ORDER BY NEWID()

IBM DB2:

SELECT firstname , RAND() as IDX
FROM (SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname)
ORDER BY IDX FETCH FIRST 2 ROWS ONLY

Wyrocznia:

SELECT firstname
FROM(SELECT firstname, COUNT(*) as count FROM names GROUP BY firstname ORDER BY dbms_random.value )
WHERE rownum in (1,2)

Zastosuj podobne podejście do wybierania z całej puli