none
count(*) total por cada registro RRS feed

  • Pregunta

  • Hola gente
    Les hago una pregunta, talvez sea una consulta simple, pero no se como hacerla.

    Mi tabla (resumida) es asi:

    id => int
    nombre => varchar
    apellido => varchar
    RANGO => varchar (el rango es un numero, ejemplo seria asi 1.2.1.1.1)

    Lo que yo necesito agregar es una columna que se llame CantidadRango, y me cuente, por cada rango, cuantos registros hay EN TOTAL, por cada uno de los registros que hay en RANGO.

    Yo tengo este query que me muestra todos los RANGOS, y al lado me muestra la cantidad de veces que se repite cada uno:

    SELECT [rango], count(*) as CantidadRango
    FROM miTabla
    GROUP by [rango]
    ORDER BY CantidadRango DESC

    Pero yo necesito algo asi:

    ID---Nombre---Apellido---RANGO-------CantidadRango
    1----Nombre1--Apellido1--4.0.1.0.1---3
    2----Nombre2--Apellido2--3.0.1.2.0---2
    3----Nombre3--Apellido3--4.0.1.0.1---3
    4----Nombre4--Apellido4--2.0.1.2.1---4
    5----Nombre5--Apellido5--2.0.1.2.1---4
    6----Nombre6--Apellido6--2.0.1.2.1---4
    7----Nombre7--Apellido7--2.0.1.2.1---4
    8----Nombre8--Apellido8--3.0.1.2.0---2
    9----Nombre9--Apellido9--4.0.1.0.1---3

    Osea, me gustaria obtener por cada RANGO, cuantas veces se repite en todos los registros.

    Me podrian ayudar por favor?

    Muchas gracias
    viernes, 12 de agosto de 2016 19:34

Respuestas

  • oknarf1976,

    Realiza la cuenta por cada ocurrencia de conjunto:

    SELECT 
    	t1.ID,
    	t1.Nombre, 
    	t1.Apellido,
    	t1.Rango,
    	COUNT(*) OVER(PARTITION t1.Rango) AS CantidadRango
    FROM 
    	T t1;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 12 de agosto de 2016 20:25
  • Estas a punto de resolver el problema por ti mismo.

    Usa el query donde agrupas como una tabla derivada y unelo a la tabla para mostrar detalle y sumario a la vez.

    select A.ID, A.Nombre, A.Apellido, A.rango, B.CantidadRango
    from miTabla as A inner join (tu query de agrupacion aqui y sin ORDER BY) as B
    on B.rango = A.rango;

    Tambien puedes usar una funcion de agregacion de ventana como recomendo Willams, pero te recomiendo pruebes ambas soluciones y escojas la que mejor desempenio tenga. Teniendo indices adecuados para soportar la query muchas veces la primera opcion suele tener mejor desempenio.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 15 de agosto de 2016 12:42

Todas las respuestas

  • Hola,

    Tal vez esta consulta te sirva:

    SELECT M.ID,M.NOMBRE,M.APELLIDO,M.RANGO,(SELECT COUNT(*) FROM MITABLA WHERE MITABLA.RANGO=M.RANGO) AS CANTIDADRANGO FROM MITABLA AS M ORDER BY M.ID


    Victor Koch

    viernes, 12 de agosto de 2016 19:51
  • oknarf1976,

    Realiza la cuenta por cada ocurrencia de conjunto:

    SELECT 
    	t1.ID,
    	t1.Nombre, 
    	t1.Apellido,
    	t1.Rango,
    	COUNT(*) OVER(PARTITION t1.Rango) AS CantidadRango
    FROM 
    	T t1;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 12 de agosto de 2016 20:25
  • Estas a punto de resolver el problema por ti mismo.

    Usa el query donde agrupas como una tabla derivada y unelo a la tabla para mostrar detalle y sumario a la vez.

    select A.ID, A.Nombre, A.Apellido, A.rango, B.CantidadRango
    from miTabla as A inner join (tu query de agrupacion aqui y sin ORDER BY) as B
    on B.rango = A.rango;

    Tambien puedes usar una funcion de agregacion de ventana como recomendo Willams, pero te recomiendo pruebes ambas soluciones y escojas la que mejor desempenio tenga. Teniendo indices adecuados para soportar la query muchas veces la primera opcion suele tener mejor desempenio.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 15 de agosto de 2016 12:42