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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para devolver solo el grupo de edad con la mayoría de los registros, puedes usar la función MAX en combinación con una subconsulta. Aquí tienes una posible solución:

    SELECT age_group
    FROM (
        SELECT 
            COUNT(CASE WHEN DATEDIFF(YEAR, a.Data_Nasc, GETDATE()) BETWEEN 18 AND 29 THEN a.Data_Nasc END) AS '18-29',
            COUNT(CASE WHEN DATEDIFF(YEAR, a.Data_Nasc, GETDATE()) BETWEEN 30 AND 39 THEN a.Data_Nasc END) AS '30-39',
            COUNT(CASE WHEN DATEDIFF(YEAR, a.Data_Nasc, GETDATE()) BETWEEN 40 AND 49 THEN a.Data_Nasc END) AS '40-49',
            COUNT(CASE WHEN DATEDIFF(YEAR, a.Data_Nasc, GETDATE()) BETWEEN 50 AND 59 THEN a.Data_Nasc END) AS '50-59',
            COUNT(CASE WHEN DATEDIFF(YEAR, a.Data_Nasc, GETDATE()) > 60 THEN a.Data_Nasc END) AS '>60'
        FROM Cliente a
            JOIN Encomenda b ON b.NIF_Cliente = a.NIF_Cliente
        WHERE b.NIF_Inst <> 999999999
    ) AS counts
    CROSS APPLY (
        VALUES ('18-29', '30-39', '40-49', '50-59', '>60')
    ) AS age_groups (age_group)
    WHERE counts.age_group = MAX(counts.age_group)
    

    Explicación:

    1. La consulta interna calcula las cuentas para cada grupo de edad, como en la consulta original.
    2. La cláusula CROSS APPLY crea una tabla virtual de grupos de edad, con una fila por grupo.
    3. La cláusula WHERE filtra las filas para mantener solo aquellas donde la cuenta coincide con la cuenta máxima (es decir, el grupo de edad con la mayoría de los registros).
    4. La consulta externa devuelve solo la columna de grupo de edad.

    Ten en cuenta que si hay varios grupos de edad con la misma cuenta máxima, la consulta devolverá todos ellos. Si deseas desempatar arbitrariamente, puedes agregar un criterio secundario de ordenación a la cláusula ORDER BY de la función MAX.

Comments are closed.