Pablo, Gracias, está muy claro el ejemplo. ¿Esto quiere decir que si bien no los calcula me está mostrando el resulset que necesito? Te pregunto esto porque una vez obtenida la consulta anterior, para asegurarme después probé haciendo un simple:
SELECT COUNT(*) AS L1 FROM NombreTabla WHERE L1 LIKE 0 Resultado: L1 ----------- 52 Igual al que obtengo con el GROUP BY. Y, cuando le saco el TOP, de la consulta: SELECT L1, COUNT(*) AS Veces FROM NombreTabla GROUP BY L1 ORDER BY Veces DESC El resultado es el mismo, pero ordenado: L1 Veces ----------- ----------- 0 52 2 51 1 45 3 44 4 42 6 35 5 28 7 24 8 22 10 16 11 16 9 14 15 13 12 11 13 10 14 8 16 7 18 6 19 3 21 2 22 1 23 1 26 1 31 1 20 1 17 1 En síntesis Pablo, ¿mi confusión era creer que había un cálculo cuando en realidad la consulta sólo ordenaba por orden de "apariciones"? ¿Muy loco esto de no necesitar ningún cálculo? La BD me termina ahorrando laburo de algoritmia complicada dentro de la aplicación. =) Espero que sea como te acabo de consultar... Si es que me expliqué bien. Muchas gracias Pablo y "metete" las veces que tengas que hacerlo, muchas cabezas siempre piensan "x + 1", donde x = "cantidad de cabezas" => "x + 1" > x. Es decir, mejor. =) Saludos El día 21/12/07, PabloC <[EMAIL PROTECTED]> escribió: > > OScar perdon que me meta, pero con tu ejemplo no estan contando cuantas > veces se repite el cero, esta contando cuantas veces se repite cada campo1, > pero como lo ordenas por ese mismo campo y haces top1 y el valor es 0, es > eso lo que vez que se repite 56 veces > Los group by no son tan complicados como te lo planteas, simplemente pensa > que ORDENA todos los registros resultantes de tu consulta y luego los > AGRUPA, algo asi > Si tu consulta trae > > 0 10 > 1 5 > 3 12 > 0 8 > 1 10 > > Primero los ordena > > 0 10 > 0 8 > 1 5 > 1 10 > 3 12 > > y luego los junta, en ese caso sumando la 2da columna > > 0 18 > 1 15 > 3 12 > > OJO, no digo que el motor haga esto en esta forma, sino que es para que > tengas una idea de como seria > > Saludos > PabloC > > ----- Original Message ----- > *From:* Oscar Onorato <[EMAIL PROTECTED]> > *To:* pablo.canonico <[EMAIL PROTECTED]> > *Sent:* Friday, December 21, 2007 12:46 PM > *Subject:* [dbms] Group By > > > > Gracias Maxi, > > En realidad veo que tengo un problema con la comprensión de cómo funcionan > la consultas en T-SQL usadas generalmente para reporting. > > En este caso, no llego a entender cómo hace internamente SQL Server -2000 > en este caso- para calcular todos los nºs del campo (con cerca de 800 > registros), simplemente con dos palabras clave dentro de la consulta en > gral.: > > SELECT TOP 1 Campo1, COUNT(*) AS Veces > FROM NombreTabla > GROUP BY Campo1 > ORDER BY Veces DESC > > Como había mandado en el primer email, el resultado de esta consulta es: > > Campo1 Veces > ----------- ----------- > 0 46 > > Y cuando con otra consulta cuento la cantidad de veces que se repite el 0 > en ese mismo campo, son 46 como me tira la consulta de arriba. Pero no puedo > razonar la consulta porque no llego a entender qué hace SQL server. Es > decir, me gustaría saber cómo pensar las consultas de este tipo. > Quizás me falte conocer cómo pensarlas, pero no sé qué tengo que conocer > primero. > Es decir, no sé lo que me falta saber para entender el razonamiento de las > consultas complejas y de reporting en gral. > Las segundas se me complican mucho más que las primeras (por a los JOINS > los puedo razonar, incluso cuando son consultas anidadas. Pero con el Group > By según lo poco que pude leer opera de forma distinta según su contexto > (las otras palabras clave dentro de la misma consulta). Por ejemplo, cuando > tiene funciones de agregación, etc. En ese caso el resultado parece > distinto. > > Perdón por lo extenso de mi respuesta, pero la idea gral. es que no sé > bien cómo pensar las consultas de reporting. Si me recomendas algun buen > texto para comprender mejor este tipo consultas, sería buenísimo. QUizás me > este equivocando, pero me parece que en el Group By SQL Server hace > internamente cálculos que son tan transparentes que no puedo terminar de > pensar la consulta de manera simple. > > Nuevamente gracias Maxi, saludos. > > > > El día 21/12/07, Maxi Accotto <[EMAIL PROTECTED]> escribió: > > > Hola OScar, como estas? no comprendo bien cual es tu duda, si queres > > saber como resolver la query o como funciona sql internamente para > > hacerlo. > > > > Si vos queres hacer un where en agrupaciones necesitas usar having, > > entonces si queres saber cuales son los registros que tienen entre 0 y > > 60 veces de datos repetidos deberias hacer algo como esto > > > > > > SELECT Campo1, COUNT(*) AS Veces > > FROM NombreTabla > > GROUP BY Campo1 > > HAVING COUNT(*) < 60 > > ORDER BY Veces DESC > > > > > > > > El 20/12/07, Oscar Onorato < [EMAIL PROTECTED]> escribió: > > > > > > Hola cumpas, > > > > > > Ya leí los Books On Line (me anticipio por algun iluminado que > > responda con > > > poca onda). > > > Pero necesito saber concretamente cómo opera en cada contexto. > > > > > > En mi caso lo estoy necesitando en una consulta donde necesito saber > > cual es > > > el nº (entre 0 y 60) que se repite mayor cantidad de veces en un mismo > > > campo. > > > > > > Les paso el Stored Procedure que estoy, usando para campo individual. > > > > > > SELECT TOP 1 Campo1, COUNT(*) AS Veces > > > FROM NombreTabla > > > GROUP BY Campo1 > > > ORDER BY Veces DESC > > > > > > Este es el resultado actual: > > > > > > Campo1 Veces > > > ----------- ----------- > > > 0 46 > > > > > > No llego a entender qué hace Group By tras bambalinas, si calcula y si > > lo > > > hace cómo lo hace. > > > ¿El COUNT(*) determina el resultado del Group By?¿Cómo lo hace, como > > lo > > > calcula? > > > Quizás sería bueno leer algo para entender consultas de este tipo > > desde cómo > > > las razonamos. > > > > > > Si me puede ayudar les voy a estar muy agradecido. > > > > > > Saludos y gracias > > > > > > > > > > > > -- > > ----------------------------------------------------------- > > Microsoft MVP en SQL Server > > Mentor asociado en SQLTotalConsulting > > Excelencia en servicios y consultoria SQLServer > > www.sqltotalconsulting.com > > ----------------------------------------------------------- > > > > >
