leetcode-mysql 1142. Actividad del usuario en los últimos 30 días II + 176. El segundo salario más alto +596. Clases con más de 5 estudiantes +597. Solicitud de amigo I: Tasa de aprobación general

Fuente:
Descargo de responsabilidad: si violé los derechos de alguien, comuníquese conmigo y lo eliminaré.
Bienvenidos expertos para rociarme

1142. Actividad de los usuarios en los últimos 30 días II

Enlace: https://leetcode-cn.com/problems/user-activity-for-the-past-30-days-ii

Descripción del Título:

Tabla: Actividad

± -------------- ± -------- +
| Nombre de columna | Tipo |
± -------------- ± --- ----- +
| id_usuario | int |
| id_sesión | int |
| fecha_actividad | fecha |
| tipo_actividad | enumeración |
± -------------- ± -------- +
La tabla no tiene clave primaria, puede tener filas duplicadas.
La columna activity_type es una de ENUM ("open_session", "end_session", "scroll_down", "send_message").
La tabla muestra la actividad de los usuarios en los sitios de redes sociales.
Tenga en cuenta que cada sesión pertenece exactamente a un usuario.

Escriba una consulta SQL para encontrar el número promedio de sesiones por usuario durante los 30 días que terminan el 27 de julio de 2019 (inclusive), redondeado a dos lugares decimales. Solo contamos las sesiones válidas en las que el usuario realizó al menos una actividad durante la sesión.

El formato del resultado de la consulta se muestra en el siguiente ejemplo:

Tabla de actividades:
± -------- ± ----------- ± -------------- ± ---------- ---- +
| user_id | session_id | fecha_actividad | activity_type |
± -------- ± ----------- ± -------------- ± ------------- - +
| 1 | 1 | 2019-07-20 | open_session |
| 1 | 1 | 2019-07-20 | scroll_down |
| 1 | 1 | 2019-07-20 | end_session |
| 2 | 4 | 2019-07-20 | open_session |
| 2 | 4 | 2019-07-21 | send_message |
| 2 | 4 | 2019-07-21 | end_session |
| 3 | 2 | 2019-07-21 | open_session |
| 3 | 2 | 2019-07-21 | send_message |
| 3 | 2 | 2019-07-21 | end_session |
| 3 | 5 | 2019-07-21 | open_session |
| 3 | 5 | 2019-07-21 | scroll_down |
| 3 | 5 | 2019-07-21 | end_session |
| 4 | 3 | 2019-06-25 | open_session |
| 4 | 3 | 2019-06-25 | end_session |
± -------- ± ----------- ± -------------- ± ------------- - +

Tabla de resultados:
± -------------------------- +
| average_sessions_per_user |
± --------------- ----------- +
| 1.33 |
± -------------------------- +
Usuario 1 y 2 en el pasado 30 Cada uno tiene 1 sesión al día y el usuario 3 tiene 2 sesiones, por lo que el promedio es (1 + 1 + 2) / 3 = 1.33.

responder

select ifnull(round(count(distinct(session_id)) / count(distinct(user_id)),2), 0) as average_sessions_per_user
from Activity
-- where activity_date between   "2019-06-28" and "2019-07-27" ;
where datediff("2019-07-27", activity_date) < 30;

Uso de dateiff

También puedes mirar aquí directamente

La función DATEDIFF () devuelve el número de días entre dos fechas.
DATEDIFF (fecha1, fecha2) Los parámetros fecha1 y fecha2 son expresiones de fecha o fecha / hora válidas.

SELECT DATEDIFF ('2008-12-30', '2008-12-29') AS DiffDate # 1
SELECT DATEDIFF ('2008-12-29', '2008-12-30') AS DiffDate # -1

176. El segundo salario más alto

Enlace: https://leetcode-cn.com/problems/second-highest-salary

Descripción del Título

Escriba una consulta SQL para obtener el segundo salario más alto en la tabla Empleado (Salario).

± - ± ------- +
| Id | Salario |
± - ± ------- +
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
± - ± ----- - +
Por ejemplo, en la tabla de empleados anterior, la consulta SQL debe devolver 200 como el segundo salario más alto. Si no hay un segundo salario más alto, la consulta debe devolver un valor nulo.

± -------------------- +
| SecondHighestSalary |
± -------------------- +
| 200 |
± -------------------- +

responder

select 
    ifnull(
        (select distinct(Salary) from Employee order by Salary desc limit 1,1), 
        null) 
    as SecondHighestSalary

El límite de mysql devuelve un dato

order by createtime desc // orden descendente; asc: orden ascendente
LIMIT 1

596. Clases con más de 5 alumnos

Descripción del Título

Enlace: https://leetcode-cn.com/problems/classes-more-than-5-students
Hay una tabla de cursos con: estudiante (estudiante) y clase (curso).

Enumere todas las clases con más o igual a 5 estudiantes.

Por ejemplo, la mesa:

± -------- ± ----------- +
| estudiante | clase |
± -------- ± ----------- +
| A | Matemáticas |
| B | Inglés |
| C | Matemáticas |
| D | Biología
| E | Matemáticas |
| F | Computadora |
| G | Matemáticas |
| H | Matemáticas |
| Yo | Matemáticas |
± -------- ± ----------- +
应该 输出:

± -------- +
| clase |
± -------- +
| Matemáticas |
± -------- +

responder

Subconsulta

select class from (
select class, count(distinct student)as num from courses group by class
) as template_table 
where num >= 5;

Agrupación directa:

select class from courses group by class  
having count(distinct(student))>=5

597. Solicitud de amigo I: Tasa general de aprobación

Descripción del Título

Enlace: https://leetcode-cn.com/problems/friend-requests-i-overall-acceptance-rate
En aplicaciones sociales como Facebook o Twitter, las personas a menudo envían aplicaciones de amigos y reciben aplicaciones de amigos de otras personas.

表 : FriendRequest

± --------------- ± -------- +
| Nombre de columna | Tipo |
± --------------- ± - ------- +
| sender_id | int |
| send_to_id | int |
| request_date | date |
± --------------- ± -------- +
this La tabla no tiene clave primaria y puede contener duplicados.
La tabla contiene el ID del usuario que envió la solicitud, el ID del usuario que aceptó la solicitud y la fecha de la solicitud.
Tabla: RequestAccepted

± --------------- ± -------- +
| Nombre de columna | Tipo |
± --------------- ± - ------- +
|
request_id | int | | accept_id | int |
| accept_date | date |
± --------------- ± -------- +
esto La tabla no tiene clave primaria y puede contener duplicados.
La tabla contiene el ID del usuario que envió la solicitud, el ID del usuario que aceptó la solicitud y la fecha en que se pasó.

Escribe una oración de consulta para encontrar la tasa de aprobación de la solicitud de un amigo, expresada con 2 decimales. La tasa de aprobación se divide por el número de solicitudes aceptadas por amigos dividido por el número total de solicitudes.

rápido:

No todas las solicitudes de amistad aprobadas están en la tabla friend_request. Solo necesita contar el número total de solicitudes aprobadas (independientemente de si están en la tabla de FriendRequest) y dividirlo por el número total de solicitudes para obtener la tasa de aprobación.
El remitente de una solicitud de amistad puede enviar varias solicitudes de amistad al destinatario Tal vez la solicitud de un amigo sea aprobada varias veces. En este caso, las solicitudes de amistad repetidas solo se cuentan una vez.
Si no hay una solicitud de un amigo, la tasa de aprobación es 0.00.

El resultado de la consulta debe verse como el siguiente ejemplo:

FriendRequest 表 :
± ---------- ± ----------- ± ------------- +
| sender_id | send_to_id | request_date |
± ---------- ± ----------- ± ------------- +
| 1 | 2 | 2016/06/01 |
| 1 | 3 | 2016/06/01 |
| 1 | 4 | 2016/06/01 |
| 2 | 3 | 2016/06/02 |
| 3 | 4 | 2016/06/09 |
± ---------- ± ----------- ± ------------- +

RequestAccepted 表 :
± ------------- ± ------------ ± ------------ +
| requester_id | accept_id | accept_date |
± ------------- ± ------------ ± ------------ +
| 1 | 2 | 2016/06/03 |
| 1 | 3 | 2016/06/08 |
| 2 | 3 | 2016/06/08 |
| 3 | 4 | 2016/06/09 |
| 3 | 4 | 2016/06/10 |
± ------------- ± ------------ ± ------------ +

Tabla de resultados:
± ------------ +
| accept_rate |
± ------------ +
| 0.8 |
± ------------ +
Hay un total de 5 solicitudes y 4 solicitudes de aprobación diferentes, por lo que la tasa de aprobación es 0,80

Solución del problema (¡¡el problema no se entiende !!)

## 子表一定要有别名啊!!!!
select round(
    ifnull(
        (select count(*) from (select distinct requester_id, accepter_id from RequestAccepted) as b)
        /
        (select count(*) from (select distinct sender_id, send_to_id from FriendRequest) as a)
    ,0)
 ,2) as accept_rate 

Supongo que te gusta

Origin blog.csdn.net/qq_45531729/article/details/112200264
Recomendado
Clasificación