MySQL - conulta Select y ordenamiento

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 8 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

conulta Select y ordenamiento

Publicado por Eric Alexander (2 intervenciones) el 04/08/2018 05:48:35
tengo una tabla que tiene las columnas codigo, nombre, region



codigo nombre region

111 peras 1

112 manzanas 2

113 naranjas 3

114 coliflor 4

115 flores 3

116 limon 1

117 mango 1



tengo esta tabla de ejemplo y lo que quiero es agrupar los datos por region pero que la region con mas cantidad de items de la misma region vaya primero osea quiero que quede asi.



codigo nombre region

111 peras 1

116 limon 1

117 mango 1

113 naranjas 3

115 flores 3

112 manzanas 2

114 coliflor 4



he intentado con un Select * FROM tabla group by region;



pero estas query me entrega el campo con la cantidad de datos pero reducida por lo que no puedo desplegar todos los campos



he intentado con varias query que he ido encontrando a travez de las semanas por internet y la verdad que no manejo a la perfeccion SQL (si no no tendria este problema) por lo cual les solicito ayuda o una idea de como hacerlo.



espero alguien que se maneje en sql pueda ayudarme ya que llevo semanas buscando por internet sin dar con lo que busco y recien comienzo con sql



estoy practicando con mysql version 8.0



gracias....
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: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

conulta Select y ordenamiento

Publicado por Leonardo Josué (414 intervenciones) el 06/08/2018 16:19:53
Hola Eric Alexander:

veo que es tu primer post, así es que vale la pena hacerte una recomendación:

1
2
espero alguien que se maneje en sql pueda ayudarme ya que llevo semanas buscando por internet sin dar con lo
que busco y recien comienzo con sql

Hablar de semanas buscando en Internet sin encontrar algo que te pueda servir es una barbaridad. Debes de tomarte dos o tres horas buscando algo que necesites, sino encuentras una respuesta que te sirva entonces acudes a los foros y si los foros no te dan una respuesta entonces buscas otra alternativa, como hacerlo programáticamente o de plano no hacerlo.

Ahora bien, tienes muchas formas en realidad para hacer lo que quieres, pero como dice el principio de la navaja de Ockham: lo más simple suele ser lo correcto.

En este caso, la manera más sencilla de hacerlo es con subconsultas:

1. Primero, tienes que determinar el número de items que tiene cada REGION, ya que éste es el criterio que quieres utilizar para la ordenación, esto lo obtienes con un SELECT-COUNT simple, así:

1
2
3
4
5
6
7
8
9
10
mysql> Select region, count(1) total FROM tabla group by region;
+--------+-------+
| region | total |
+--------+-------+
|      1 |     3 |
|      3 |     2 |
|      2 |     1 |
|      4 |     1 |
+--------+-------+
4 rows in set (0.00 sec)

Esto quiere decir que la Región 1 es la que debe de aparecer primero, enseguida la 3 y finalmente la 2 y la 4.

entonces, utilizas esto como una SUBCONSULTA para asignarle a tu tabla principal EL TOTAL DE ITEM's que tiene cada región y ordenas de manera DESCENDIENTE por este mismo campo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT T1.*, T2.total
    -> FROM tabla T1
    -> INNER JOIN
    -> ( SELECT region, count(1) total
    ->   FROM tabla
    ->   GROUP BY region ) T2 on T2.region = T1.region
    -> ORDER BY T2.total desc, T1.codigo;
+--------+----------+--------+-------+
| codigo | nombre   | region | total |
+--------+----------+--------+-------+
|    111 | peras    |      1 |     3 |
|    116 | limon    |      1 |     3 |
|    117 | mango    |      1 |     3 |
|    113 | naranjas |      3 |     2 |
|    115 | flores   |      3 |     2 |
|    112 | manzanas |      2 |     1 |
|    114 | coliflor |      4 |     1 |
+--------+----------+--------+-------+
7 rows in set (0.00 sec)

No es necesario que la columna TOTAL aparezca en el SELECT, sólo la puse para que veas cómo se arma el JOIN.

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
2
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 8 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

conulta Select y ordenamiento

Publicado por Eric Alexander (2 intervenciones) el 06/08/2018 22:25:08
Estimado antes que nada muchisimas gracias por ayudarme y darte el tiempo de responder este hilo

con respecto a buscar por semanas la verdad que no miento, estuve varias semanas intentando y buscando cosas por aqui y por alla, ya que no me gusta preguntar en un foro hasta que realmente no pueda hacerlo, ya que haci me he cabeceado mas de alguna vez buscando la solucion a algun problema y finalmente he podido solucionarlo y mi consulta que aunque parezca sensilla, se me habia muy dificil.

habia intentado con un count, pero luego no sabia como ocupar ese valor .

tambien intente con otro select como tu lo indicas pero ahora veo que lo hacia mal, por eso siempre me marcaba error al intentar.

lo del inner join no se me habia ni pasado por la cabeza intentarlo de esa manera, como ya dije lo hacia mal y finalmente desisti de esa idea pensando que no era la solucion definitiva.

te cuento que estoy intentando aprender PHP y mysql por mi cuenta por lo que paso de manual en manual e intentando cosas hasta que me tope con ese problema que se me ocurrio ordenar los productos por region (solo por practicar) y no podia dar con la respuesta

una vez mas te agradezco tu disposicion y buena voluntad de ayudar


un abrazo...
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