Esta serie mantiene la mente fresca resolviendo, uno a uno, los ejercicios de HackerRank. Cada entrada toma un tema concreto y lo agota; todas las consultas están en MySQL salvo donde se indique.
Te invito a intentar cada ejercicio antes de leer la solución.
Arrancamos por la tabla CITY: seleccionar, filtrar y contar. Nada de uniones todavía.
The CITY table is described as follows:
| Column | Type |
|---|---|
| ID | INT |
| NAME | VARCHAR |
| COUNTRYCODE | VARCHAR |
| DISTRICT | VARCHAR |
| POPULATION | INT |
Revising the Select Query I
Query all columns for all American cities in the CITY table with populations larger than 100000. The CountryCode for America is USA.
Solución
Para resolver este problema usamos el operador de comparación > para filtrar las ciudades con una población mayor a 100000 habitantes. Además, como necesitamos que las ciudades sean de Estados Unidos, utilizamos el operador = para comparar el valor USA en la columna CountryCode. Como ambas condiciones deben cumplirse al mismo tiempo, se combinan usando el operador lógico AND.
SELECT * FROM City WHERE population > 100000 AND CountryCode = "USA";| ID | NAME | COUNTRYCODE | DISTRICT | POPULATION |
|---|---|---|---|---|
| 3878 | Scottsdale | USA | Arizona | 202705 |
| 3965 | Corona | USA | California | 124966 |
| 3973 | Concord | USA | California | 121780 |
| 3977 | Cedar Rapids | USA | Iowa | 120758 |
| 3982 | Coral Springs | USA | Florida | 117549 |
Revising the Select Query II
Query the NAME field for all American cities in the CITY table with populations larger than 120000. The CountryCode for America is USA.
Solución
Siguiendo con la continuacion de la tabla CITY ahora nos pide solo seleccionar el campo NAME (ya que antes seleccionábamos todo usando * ) y lo demás sigue siendo igual, la diferencia solo radica que en vez de 100000 habitantes serán 120000
SELECT NAME FROM City WHERE population > 120000 AND CountryCode = "USA";| NAME |
|---|
| Scottsdale |
| Corona |
| Concord |
| Cedar Rapids |
Select All
Query all columns (attributes) for every row in the CITY table.
Solución
SELECT * FROM City;| ID | NAME | COUNTRYCODE | DISTRICT | POPULATION |
|---|---|---|---|---|
| 6 | Rotterdam | NLD | Zuid-Holland | 593321 |
| 3878 | Scottsdale | USA | Arizona | 202705 |
| 3965 | Corona | USA | California | 124966 |
| 3973 | Concord | USA | California | 121780 |
| 3977 | Cedar Rapids | USA | Iowa | 120758 |
| 3982 | Coral Springs | USA | Florida | 117549 |
| 4054 | Fairfield | USA | California | 92256 |
| 4058 | Boulder | USA | Colorado | 91238 |
| 4061 | Fall River | USA | Massachusetts | 90555 |
Select By Id
Query all columns for a city in CITY with the ID 1661.
Solución
Usaremos el operador = para realizar la búsqueda en la columna ID
SELECT * FROM City WHERE ID = 1661;| ID | NAME | COUNTRYCODE | DISTRICT | POPULATION |
|---|---|---|---|---|
| 1661 | Sayama | JPN | Saitama | 162472 |
Japanese Cities Attributes
Query all attributes of every Japanese city in the CITY table. The COUNTRYCODE for Japan is JPN.
Solución
Ahora sera lo mismo que la anterior vez, pero en vez de buscar el valor USA sera JPN
SELECT * FROM City WHERE COUNTRYCODE = 'JPN'| ID | NAME | COUNTRYCODE | DISTRICT | POPULATION |
|---|---|---|---|---|
| 1613 | Neyagawa | JPN | Osaka | 257315 |
| 1630 | Ageo | JPN | Saitama | 209442 |
| 1661 | Sayama | JPN | Saitama | 162472 |
| 1681 | Omuta | JPN | Fukuoka | 142889 |
| 1739 | Tokuyama | JPN | Yamaguchi | 107078 |
Japanese Cities Name
Query the names of all the Japanese cities in the CITY table. The COUNTRYCODE for Japan is JPN.
Solución
Este es el mismo procedimiento del ejercicio anterior, pero solamente seleccionando name
SELECT name FROM City WHERE COUNTRYCODE = 'JPN'| NAME |
|---|
| Neyagawa |
| Ageo |
| Sayama |
| Omuta |
| Tokuyama |
Normalmente, a medida que avanzamos, nos encontramos con ejercicios que coinciden con conceptos que ya hemos aplicado anteriormente. Como consejo para quienes lean este blog, además de estar en proceso de aprendizaje, les servirá de gran ayuda afianzar términos y operadores en la práctica, sin dejar de lado el hecho de que pudieron haber resuelto el mismo problema en un solo ejercicio.
Revising Aggregations - The Count Function
Query a count of the number of cities in CITY having a Population larger than 100000.
Solución
Usamos la función COUNT para poder realizar conteo de ciudades y con WHERE y el operador > filtramos cuyas ciudades tengan una población mayor a 100000
SELECT COUNT(NAME) FROM City WHERE POPULATION > 100000;Revising Aggregations - The Sum Function
Query the total population of all cities in CITY where District is California.
Solución
Para este ejercicio, debemos obtener la población total de todas las ciudades en la tabla CITY cuyo District sea California. Para lograrlo, utilizamos la función SUM para sumar la población de cada ciudad que cumpla con esa condición.
SELECT SUM(POPULATION) FROM CITY WHERE DISTRICT = "California";Revising Aggregations - Averages
Query the average population of all cities in CITY where District is California.
Solución
Debemos obtener el promedio de la población de todas las ciudades en la tabla CITY cuyo District sea California. Para lograrlo, utilizamos la función AVG sobre la columna POPULATION, aplicando la condición con WHERE. Es importante notar que AVG calcula el promedio, no la suma.
SELECT AVG(POPULATION) FROM CITY WHERE DISTRICT = "California";Average Population
Query the average population for all cities in CITY, rounded down to the nearest integer.
Solución
Para obtener el promedio de la población de todas las ciudades y redondearlo hacia abajo al entero más cercano, usamos AVG(POPULATION) para calcular el promedio y FLOOR() para redondear hacia abajo
SELECT FLOOR(AVG(POPULATION)) FROM CITY;Japan Population
Query the sum of the populations for all Japanese cities in CITY. The COUNTRYCODE for Japan is JPN.
Solución
Utilizamos la función SUM para sumar la población de cada ciudad que tenga en su COUNTRYCODE el valor JPN .
SELECT SUM(POPULATION) FROM CITY WHERE COUNTRYCODE = "JPN";Population Density Difference
Query the difference between the maximum and minimum populations in CITY.
Solución
Aquí solo realizamos una resta entre la población máxima y mínima, para saber la diferencia entre ellas.
SELECT MAX(POPULATION) - MIN(POPULATION) FROM CITY;