упорядочить по ГДЕ, КАК вернул результат - PullRequest
1 голос
/ 25 сентября 2019

У меня есть таблица со следующими столбцами:

id | ip | url

, где id - это первичный ключ.

Я хотел бы вернуть количество ips на основе WHERE LIKEкода страны.например, все URL имеют одинаковую структуру: www.someWebsite.com/countryCode/blabla.Несколько записей для демонстрации:

id | ip | url

1 | 255.255.255.255 | www.someWebsite.com/US/blabla
2 | 127.0.0.1 | www.someWebsite.com/UK/blabla
3 | 111.111.222.245 | www.someWebsite.com/FR/blabla
4 | 111.111.222.245 | www.someWebsite.com/NL/blabla
...

Но то, что у меня есть тонны стран, и различие в регистре слишком много.Есть ли способ сделать это без использования кейсов?Я собирался что-то вроде:

select ip, COUNT(ip) AS MOST_FREQUENT
from myTable
WHERE url LIKE 'www.someWebsite.com/UK/%'
GROUP BY ip
ORDER BY COUNT(url) DESC

, но это возвращает каждый ip и URL-адреса, связанные с ними, пока я стремлюсь к подсчету ips из каждой страны.

1 Ответ

2 голосов
/ 25 сентября 2019

Если код страны будет состоять только из двух символов (общий стандарт), тогда вы можете использовать некоторые строковые операции, такие как Substring_Index() и Left():

select LEFT(SUBSTRING_INDEX(url, 'www.someWebsite.com/', -1), 2) AS country_code, 
       COUNT(DISTINCT ip) AS ip_count 
from myTable
WHERE url LIKE 'www.someWebsite.com/%'
GROUP BY country_code
ORDER BY ip_count DESC

SUBSTRING_INDEX(url, ''www.someWebsite.com/', -1) для url = 'www.someWebsite.com/US/blabla' вернет 'US/blabla'.

Теперь LEFT('US/blabla', 2) вернет первые два символа слева, то есть код страны: US.Затем вы можете GROUP BY для этого кода страны и подсчитать различные (уникальные) значения ip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...