SQL - Dudas sobre una consulta

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 17 puestos en SQL (en relación al último mes)
Gráfica de SQL

Dudas sobre una consulta

Publicado por victor (3 intervenciones) el 04/06/2018 21:17:24
Buenas, este es mi primer post, saludos a todos.

Tengo esta consulta a 3 tablitas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT  a.id AS id_a,
    a.label AS label_a,
    a.accounting_move_id,
    a.accounting_account_id,
    a.accounting_period_id,
    a.debt,
    a.credt,
    a.date_at date_at_a,
    a.created_at created_a,
    a.updated_at AS t0_c9,
    a.reconciled AS t0_c10,
    b.id,
    b.journal_id ,
    b.label label_b,
    b.date_at,
    b.created_at created_b,
    b.updated_at updated_b,
    b.status,
    c.access_key,
    c.code,
    c.label label_c
        FROM mip_accounting_move_line a
            INNER JOIN mip_accounting_move b
                          ON (a.accounting_move_id=b.id)
                            AND ((status = 'EM98') or (status = 'EM01'))
            INNER JOIN mip_accounting_account c
                          ON (a.accounting_account_id=c.id)
 
        ORDER BY c.access_key

Funciona correctamente, pero necesito agrupar ciertos valores e intente esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SELECT  a.id AS id_a,
    a.label AS label_a,
    a.accounting_move_id,
    a.accounting_account_id,
    a.accounting_period_id,
    SUM(a.debt),
    SUM(a.credt),
    a.date_at date_at_a,
    a.created_at created_a,
    a.updated_at AS t0_c9,
    a.reconciled AS t0_c10,
    b.id,
    b.journal_id ,
    b.label label_b,
    b.date_at,
    b.created_at created_b,
    b.updated_at updated_b,
    b.status,
    c.access_key,
    c.code,
    c.label label_c
        FROM mip_accounting_move_line a
            INNER JOIN mip_accounting_move b
                  ON (a.accounting_move_id=b.id)
                    AND ((status = 'EM98') or (status = 'EM01'))
            INNER JOIN mip_accounting_account c
                  ON (a.accounting_account_id=c.id)
 
        ORDER BY c.access_key
        GROUP BY label_c

Sumar dos columnas y agruparlas por el label_c

Pero me da un error en la consulta, se poco de sql y he estado leyendo, pero aun no encuentro el error. Si necesitan mas información para poder responder no duden en preguntar. Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 6
Ha disminuido su posición en 17 puestos en SQL (en relación al último mes)
Gráfica de SQL

Dudas sobre una consulta

Publicado por victor (3 intervenciones) el 04/06/2018 21:36:30
Ese es el error que me genera mysql workbench

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mirador_remoto.a.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 177
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Dudas sobre una consulta

Publicado por leonardo_josue (1172 intervenciones) el 04/06/2018 21:42:38
Hola Victor:

Antes que nada, bienvenido al foro, espero que te sea de mucha utilizad. en segundo lugar, unas recomendaciones:

1. Este es un foro genérico de SQL, por lo que es importante que siempre que preguntes algo incluyas en tu post con qué DBMS, así como la versión y edición del mismo, esto es porque cada motor de BD's maneja una sintaxis distinta y por lo tanto este dato nos ayuda a tener en cuenta las diferencias.

2. Cuando digas que tu consulta te marca error, entonces dinos cuál es ese error ¬¬ Por lo general los códigos de error son claros en canto a lo que está mal y dan información adicional acerca de en qué lineas está el problema. Esto es útil sobre todo en casos como este en donde la consulta es bastante extensa.

3. Siempre que pongas una consulta, comienza por decirnos qué es lo que regresa esa consulta o mejor aun, pon la estructura de cada tabla y algunos datos de ejemplo, a partir de esos datos dinos qué es lo que estás esperando como salida, así podremos hacer nuestras propias pruebas y tratar de darte una respuesta más puntual.

4. Utiliza las herramientas que te da el editor para darle formato a tus posts... por ejemplo, cuando incluyas código SQL, puedes rodearlo de las etiquetas [ code ] [ /code ] o dando clic en la opción </> que aprece junto a la happy face, dentro del menú del editor.

finalmente, y tratando de jugar al adivino, veo varias razones por las que puedes tener errores en tu consulta:

primero, en tu group by estas poniendo un campo label_c, sin embargo, este campo es un ALIAS. No todos los DBMS's te permiten agrupar sobre un alias, sino que debes de poner directamente el nombre "real" del campo por el que quieres agrupar:

1
2
3
4
5
6
7
SELECT
...
c.label label_c
FROM mip_accounting_move_line a
INNER JOIN
...
GROUP BY c.label

segundo, en la mayoría de los DBMS's, (salvo algunas excepciones como MySQL), no puedes usar campos en el SELECT que no estén incuidos en el GROUP BY... entonces, es posible que tengas que hacer algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
SELECT a.id AS id_a,
a.label AS label_a,
a.accounting_move_id,
a.accounting_account_id,
a.accounting_period_id,
SUM(a.debt),
SUM(a.credt),
a.date_at date_at_a,
a.created_at created_a,
a.updated_at AS t0_c9,
a.reconciled AS t0_c10,
b.id,
b.journal_id ,
b.label label_b,
b.date_at,
b.created_at created_b,
b.updated_at updated_b,
b.status,
c.access_key,
c.code,
c.label label_c
FROM
...
GROUP BY
a.id
a.label
a.accounting_move_id,
a.accounting_account_id,
a.accounting_period_id,
a.date_at.created_at
a.updated_at
a.reconciled
b.id,
b.journal_id ,
b.label label_b,
b.date_at,
b.created_at
b.updated_at
b.status,
c.access_key,
c.code,
c.label


Si esto no te sirve, entonces vuelvo al punto 3, dinos cómo es la estructura de tus tablas, pon algunos datos de ejemplo y a partir de esos datos dinos qué es lo que estás esperando como salida.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha disminuido su posición en 17 puestos en SQL (en relación al último mes)
Gráfica de SQL

Dudas sobre una consulta

Publicado por victor (3 intervenciones) el 04/06/2018 22:03:53
Antes que todo muchas gracias por la bienbenida, segundos antes de la tercera publicación... publique el error.

Este es parte del resultado obtenido por la consulta funcional.

k1

el plan es que en vez de que queden separadas las cuentas contables se vean en una sola linea, sin la necesidad de calcular el total en la parte inferior de todas.

En el ejemplo se ven dos cuentas contables, con distintos asientos.

1
2018-02-21 1101001 EFECTIVO EN CAJA Y BANCO  Retiro caja chica Egreso de caja  TotalSUM1 TotalSUM2




k2

Espero haberme explicado, cualquier otra cosa no duden en preguntar. Esttoy usando mysql con una base de datos utf8
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 177
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Dudas sobre una consulta

Publicado por leonardo_josue (1172 intervenciones) el 04/06/2018 22:33:02
Hola de nuevo Victor:

El error que pones se refiere a lo que comento en el segundo punto

1
2
segundo, en la mayoría de los DBMS's, (salvo algunas excepciones como MySQL), no puedes usar campos en el SELECT que no
estén incuidos en el GROUP BY... 

en este caso, aunque estás trabajando con MySQL, el servidor está configurado pora permitir sólo agrupaciones completas (es decir listando todos los campos que no tienen funciones de agrupación en el GROUP BY. Para aprender un poco más de esto, te sugiero leer la documentación oficial al respecto:

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

Entonces, tienes de dos sopas: o cambias el modo de tu servidor para permitir agrupaciones incompletas o tratas de hacer la agrupación como la puse en el ejemplo.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar