Подтвердить что ты не робот

Запрос SQL для получения значения, которое встречается более одного раза

Мне нужно запросить мою базу данных, чтобы показать записи внутри моей таблицы, где lastname встречается более трех раз. Пример: в моей таблице студентов есть 3 человека с фамилией "Смит", 4 с "Джонсоном" и 1 с "Поттером". Мой запрос должен показывать записи тех, у кого есть последние имена Смит и Джонсон, поскольку эти значения имеют больше или равно 3 раза.

Может ли кто-нибудь указать мне на это? Я думал использовать COUNT(), но я не могу представить, как его применять?

4b9b3361

Ответ 1

Для SQL Server 2005 +

;WITH T AS
(
SELECT *, 
       COUNT(*) OVER (PARTITION BY Lastname) as Cnt
FROM Students
)
SELECT * /*TODO: Add column list. Don't use "*"                   */
FROM T
WHERE Cnt >= 3

Ответ 2

Из Oracle (но работает в большинстве SQL-DB):

SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
HAVING COUNT(*) >= 3

P.S. он быстрее, потому что у вас нет выбора с помощью выбора методов здесь

Ответ 3

Для MySQL:

SELECT lastname AS ln 
    FROM 
    (SELECT lastname, count(*) as Counter 
     FROM `students` 
     GROUP BY `lastname`) AS tbl WHERE Counter > 2

Ответ 4

SELECT LASTNAME, COUNT(*)
FROM STUDENTS
GROUP BY LASTNAME
ORDER BY COUNT(*) DESC

Ответ 5

Ответы, упомянутые здесь, довольно элегантны fooobar.com/questions/285321/..., но после тестирования я понимаю, что он возвращает только фамилию. Что делать, если вы хотите вернуть всю запись? Сделай это (Для Mysql)

SELECT *
FROM `beneficiary`
WHERE `lastname`
IN (

  SELECT `lastname`
  FROM `beneficiary`
  GROUP BY `lastname`
  HAVING COUNT( `lastname` ) >1
)

Ответ 6

Для postgresql:

SELECT * AS rec 
FROM (
    SELECT lastname, COUNT(*) AS counter 
    FROM students 
    GROUP BY lastname) AS tbl 
WHERE counter > 1;