КАК найти наиболее частую строку в mySQL - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы получить самый частый тип автомобиля (varchar) среди владельцев старше 25 лет.Я написал запрос, но он учитывает все типы имен.Как я могу дополнить этот запрос MySQL для подсчета только машин одного и того же имени?

SELECT type, COUNT(type) 
FROM `car` 
INNER JOIN owner 
ON car.owner= tulajdonos.id 
WHERE 2018 - owner.birth_date >= 25

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Если вам нужен самый распространенный тип, который вы могли бы использовать

SELECT top 1 type, COUNT(type) 
    FROM `car` 
    INNER JOIN owner 
    ON car.owner= tulajdonos.id 
    WHERE 2018 - owner.birth_date >= 25
    order by count(type) desc, type

, если вы уверены, что нет никаких связей.

Кроме того, ваш способ определения возраста не идеален,Вы можете использовать что-то вроде:

WHERE 
case
    when DATEPART(DY, owner.birth_date) > DATEPART(DY, GETDATE())
        then DATEDIFF(YYYY, owner.birth_date, GETDATE()) - 1
    else DATEDIFF(YYYY, owner.birth_date, GETDATE())
end >= 25
0 голосов
/ 07 декабря 2018

Вы можете начать с правильной арифметики даты.После этого вы, вероятно, просто захотите limit:

SELECT c.type, COUNT(*) AS counter 
FROM car c INNER JOIN
     owner o
     ON c.owner= o.id 
WHERE o.birth_date < curdate() - interval 25 year;
ORDER BY counter DESC 
LIMIT 1
0 голосов
/ 06 декабря 2018

Вы должны отсортировать по убыванию ваш запрос и взять только самую верхнюю строку с LIMIT 1.

SELECT type, COUNT(type) AS counter 
FROM `car` 
INNER JOIN owner 
ON car.owner= tulajdonos.id 
WHERE 2018 - owner.birth_date >= 25
GROUP BY type
ORDER BY COUNT(type) DESC 
LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...