TOTALES y totales no duplicados

Iniciado por bgnumis, 10 Junio 2015, 23:49 PM

0 Miembros y 1 Visitante están viendo este tema.

bgnumis

Hola a ver si me podeis ayudar a obtener una tabla resumen:
Tengo una tabla llamada "Reg", en esta hay una serie de campos (insertados por los usuarios) llamadas "id_usuario", "objetivo", "fecha".
Un objetivo es un texto de 4 letras/números, y en este caso por cada "fecha" puede haber objetivos duplicados, triplicados y con usuarios diferentes y fechas diferentes o iguales.
Otra tabla llamada "totales" tiene "id_usuario" y  "objetivo" (en esta se detalla todos los posibles objetivos, los objetivos en esta tabla son únicos, y registro por registro se le asocia a cada "objetivo" un usuario.
Otra tabla llamada "nombrelargo" tiene los campos " id_usuario"  y "nombre largo" (que es un texto con su nombre)
Quiero sacar un "resumen" con los siguientes cuadros:

Una tabla de TOTALES.
Por un lado quiero sacar cuantos objetivos tiene cada id usuario (si hay 20 registros del id_usuario número 7, obtener una tabla que vaya a nombre largo y ponga "id_usuario" y por por cada uno me indique el total de "objetivos" que tiene en "totales". Además, para que sea más "entendible" me indique en una tercera columna para cada id_usuario el "nombre largo" asociado que está en la Tabla  "nombrelargo"

El siguiente cuadro resumen, sería:

Por cada " id_usuario " cuantos registros  de "objetivos no duplicados" totales hay de ese usuario. Por último, desglosar de ese total "no duplicado" cuantos son del usuario de acuerdo con la tabla "totales" y cuantos son el resto. Por último, la última columna dividiría "el total de registros por usuario no repetido" / "total de ese usuario obtenido en la tabla "TOTALES".

Supongo que es muy complicado, en excel se hacerlo, pero me interesaría hacerlo en sql. Si me podeis hechar un cable, o algún manual que haga filtros con sql con tablas os lo agradecería un montón.

engel lex

lo que buscas se resume en las palabras DISTINCT, COUNT y JOIN :P

era más facil si pegabas una captura de las tablas o si las expresabas como si fueran una tabla, y no entendí mucho lo que intentas hacer...

en este tutorial de mysql puedes conseguir los temas con las palabras clave que te dejé, recomiendo la lectura

trata de armar algo y nos avisas como te fue
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bgnumis

Empiezo por la consulta más fácil:

En la tabla "totales" tengo "id_usuario" y  "objetivo" (en esta se detalla todos los posibles objetivos, los objetivos en esta tabla son únicos, y registro por registro se le asocia a cada "objetivo" un usuario.

De manera que tengo 5 id_usuarios, y 500 objetivos.

En la tabla hay 400 registros donde cada objetivo tiene una columna de id_usuario asociado de los cinco que hay y 100 valores están en blanco.

Si quiero extrar una tabla resumen con las columnas id_usuario, total objetivos.

De manera que si soy el id_usuario 1 y tengo 77 objetivos, me haga un count y me lo muestre.

Sé que la sentencia debería ser algo así como
Código (sql) [Seleccionar]


SELECT COUNT(id_usuario) from totales




(de esta forma omito los valores nulos y me suma todos los valores donde id_usuario no es nulo)

¿Pero como le digo en php y mysql? Que me "busque" los diferentes id_usuario (sin tener que decir Where id_usuario=1etc y me muestre en una tabla el sumatorio subtotal de cada usuario?

Sigo leyendo pero por si me podeis dar un empujoncito y no para tirarme al suelo...jeje.


engel lex

como te dije, esta usaría 2 de 3 parabras que te mostré

Código (sql) [Seleccionar]
SELECT COUNT(DISTINCT(id_usuario)) FROM totales

va a contar cuantos id_usuario son distintos...

recomiendo leer el tutorial, no es largo y solo necesitas revisar los capitulos con las palabras que te indiqué
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bgnumis

Vale, prometo leerlos todos. Eres guay.

Gracias¡¡¡

(Qué pelota, pero gracias)

bgnumis

#5
Hola,

Esoy intentando leerme el manual que me pasaron en este hilo pero no consigo resolver lo siguiente:

Código (sql) [Seleccionar]
SELECT COUNT(DISTINCT('id_usuario')) FROM totales



Lo que yo esperaría es que de esta consulta me "sacara" dos columnas, una de id_usuario distintos y otra que sería el número de veces que está repetido ese usuario.

Para sacar los datos en php pongo:

Código (php) [Seleccionar]


while($consulta = mysql_fetch_array($b)){


echo "<td>".$consulta['0']."</td>";
echo "<br>";

echo "<td>".$consulta['1']."</td>";
echo "<br>";
}


b es donde pongo el SELECT.

Si por ejemplo pongo

Código (sql) [Seleccionar]
$busqueda=mysql_query("SELECT DISTINCT(`id_usuario`) FROM oficinas ") ;

Entonces sí me saca la columna de cada usuario diferente pero la segunda columna de totales de cada usuario no sabría como sacarla...

¿Qué es lo que no entiendo?

En esta consulta no necesito utilizar JOIN porque es un cálculo de una misma tabla.

Ay, lo siento por preguntar tanto....


Antes no era "oficinas" sino "totales".

Estoy viendo que hay una función llamada GROUP BY hoy estoy ya agotado pero mañana veré a ver si me sirve (y soy capaz de entenderlo).

Antes no era "oficinas" sino "totales".

Estoy viendo que hay una función llamada GROUP BY hoy estoy ya agotado pero mañana veré a ver si me sirve (y soy capaz de entenderlo).

Hola a todos,

¿Por qué no me omite los "id_usuario" que están vacios en el COUNT?


Código (sql) [Seleccionar]
SELECT id_usuario, COUNT((`id_usuario`)) FROM totales GROUP BY `id_usuario`"


Es decir, me cuenta que hay 16 "" vacios y yo no quiero que me saque el cálculo de ese registro. (Pongo "" porque no hay nada y entiendo que tampoco espacios).

engel lex

el conteo, cuenta todo... vas a tener que colocar WHERE id_usuario != ''
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.