es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando dividir una SUMA con CASE por la cuenta total de viajes y retornar el porcentaje.

Tengo dos tablas: Viajes y Usuarios.

Estoy tratando de escribir una consulta SQL para encontrar la tasa de cancelación de solicitudes con usuarios sin bloqueo (tanto el cliente como el conductor no deben estar bloqueados) cada día entre “2013-10-01” y “2013-10-03”. Redondea la tasa de cancelación en un porcentaje de salida.

Entonces, en mi caso, si el total de viajes es 4 y las cancelaciones son 2, quiero ver 0.50 o si son 3 y 1, 0.33.

Aquí está lo que estaba intentando hacer hasta ahora…

Con CTE AS (
Seleccionar Request<em>at como [DÍA], 
 SUM (CASE
            Cuando Estado= 'cancelado</em>por<em>conductor' o Estado='cancelado</em>por<em>cliente' ENTONCES 1
            Sino 0
        FIN)<br>
        como Cancelaciones,
 Contar(*) como TotalViajes
DE Viajes
Donde IDCliente NO EN (SELECCIONAR [IDUsuario]   DE [Estudio].[dbo].[Usuarios] Donde Bloqueado='SÍ' y Rol='Cliente') o IDConductor NO EN (SELECCIONAR [IDUsuario]   DE [Estudio].[dbo].[Usuarios] Donde Bloqueado='SÍ' y Rol='Conductor')
Agrupar Por Request<em>at )
Seleccionar DÍA, ((TotalViajes/Cancelaciones) *100) como TasaCancelación
De CTE

Pero la función de división no está funcionando. No estoy seguro de cómo abordarlo de otra manera.

Este es el error que estoy obteniendo.
https://i.stack.imgur.com/yVkfh.jpg

Cualquier ayuda es apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Consulta SQL para la tasa de cancelación

    Para encontrar la tasa de cancelación de solicitudes con usuarios no bloqueados, podemos utilizar la siguiente consulta SQL:

    WITH CTE AS (
        SELECT Request_at as [DÍA],
            SUM (CASE
                    WHEN Status = 'cancelled_by_driver' OR Status = 'cancelled_by_client' THEN 1
                    ELSE 0
                END) AS Cancelaciones,
            COUNT(*) as TotalViajes
        FROM Trips
        WHERE Client_id NOT IN (SELECT [Users_id] FROM [Study].[dbo].[Users] WHERE Banned = 'YES' AND Roll = 'Client')
            AND Driver_id NOT IN (SELECT [Users_id] FROM [Study].[dbo].[Users] WHERE Banned = 'YES' AND Roll = 'Driver')
            AND Request_at BETWEEN '2013-10-01' AND '2013-10-03'
        GROUP BY Request_at
    )
    
    SELECT DÍA, ROUND((CAST(Cancelaciones AS FLOAT) / TotalViajes) * 100, 2) AS TasaCancelación
    FROM CTE;
    

    En esta consulta, primero utilizamos una expresión de tabla común (CTE) para calcular el número de cancelaciones y el total de viajes para cada día entre el 1 de octubre y el 3 de octubre de 2013. Excluimos los viajes en los que el cliente o el conductor están bloqueados.

    Para el resultado final, dividimos el número de cancelaciones entre el total de viajes y multiplicamos por 100 para obtener la tasa de cancelación como un porcentaje. También redondeamos el resultado a 2 decimales.

    Ten en cuenta que necesitamos convertir la columna Cancelaciones a FLOAT para poder realizar la división correctamente.

Comments are closed.