Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:Изберете N реда, но само с уникални стойности в една колона

Вероятно не е най-елегантното решение и производителността на IN може да страда на по-големи маси.

Вложената заявка получава минималната Birthyear за всеки град. Записва само тези, които имат тази Birthyear се съпоставят във външната заявка. Подреждането по възраст и след това ограничаването до 3 резултата ви дава 3-ма най-възрастни хора, които са и най-възрастните в своя град (Егон Шпенглер отпада..)

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  |
+-----------------+-------------+------+----+

Редактиране - добавен GROUP BY City към външна заявка, тъй като хората с еднакви години на раждане биха върнали множество стойности. Групирането във външната заявка гарантира, че само един резултат ще бъде върнат на град, ако повече от един човек има този минимален Birthyear . ct колоната ще покаже дали в града има повече от един човек с тази 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. Създаване на свързани или подобни публикации с помощта на PHP и MySQL

  2. Съхранявайте php datetime в базата данни на mysql

  3. Запазване и показване на текста точно как е въведен и изпратен

  4. Командата CREATE е отказана на потребителя?

  5. Проверете дали моделът laravel е запазен или е изпълнена заявка