Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:Wybierz N wierszy, ale tylko z unikalnymi wartościami w jednej kolumnie

Prawdopodobnie nie najbardziej eleganckie rozwiązanie, a wydajność IN może ucierpieć na większych stołach.

Zapytanie zagnieżdżone otrzymuje minimalny Birthyear dla każdego miasta. Tylko rekordy, które mają ten Birthyear są dopasowane w zewnętrznym zapytaniu. Porządkowanie według wieku, a następnie ograniczenie do 3 wyników daje 3 najstarsze osoby, które są również najstarsze w swoim mieście (Egon Spengler odpada..)

SELECT Name, City, Birthyear, COUNT(*) AS ct
FROM table
WHERE Birthyear IN (SELECT MIN(Birthyear)
               FROM table
               GROUP by City)
GROUP BY City
ORDER BY Birthyear DESC LIMIT 3;

+-----------------+-------------+------+----+
| name            | city        | year | ct |
+-----------------+-------------+------+----+
| Henry Jones     | Chicago     | 1899 | 1  |
| Mac Taylor      | New York    | 1955 | 1  |
| Sarah Connor    | Los Angeles | 1959 | 1  |
+-----------------+-------------+------+----+

Edytuj - dodano GROUP BY City na zapytanie zewnętrzne, ponieważ ludzie z tymi samymi latami urodzenia zwracaliby wiele wartości. Grupowanie według zapytania zewnętrznego zapewnia, że ​​tylko jeden wynik zostanie zwrócony na miasto, jeśli więcej niż jedna osoba ma ten minimalny Birthyear . ct kolumna pokaże, czy w mieście istnieje więcej niż jedna osoba o tym Birthyear



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć dwie kolumny z automatycznym przyrostem w MySQL?

  2. Mysql:wyniki z ostatnich siedmiu dni

  3. Grupuj wyniki mysql według kategorii i wyświetlaj je w grupach w każdej kategorii

  4. Jak zresetować AUTO_INCREMENT w MySQL?

  5. Unikalna identyfikacja znaczników ulotek