Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

max luego de count

Estas en el tema de max luego de count en el foro de Mysql en Foros del Web. Hola a todos! Necesito obtener el valor maximo luego de haber usado count sobre un campo Código PHP: .... COUNT (  order_id  ) AS  cantidad ....  ...
  #1 (permalink)  
Antiguo 14/07/2009, 14:23
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
max luego de count

Hola a todos!
Necesito obtener el valor maximo luego de haber usado count sobre un campo
Código PHP:
....COUNTorder_id ) AS cantidad.... 
Este es un campo necesario, tambien deseo conocer el valor maximo de "cantidad", digamos que cantidad obtuvo los valores:1,2,54,2
Para obtener el "54" intenté esta sintaxis pero no funciona
Código PHP:
MAX (COUNTorder_id )) AS maximo 
Como podria ser?
__________________
I am Doyle please insert code.
  #2 (permalink)  
Antiguo 15/07/2009, 08:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

La solución son las subconsultas.
Danos mas detalles de tus tablas y te ayudamos en eso.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/07/2009, 12:44
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

Basicamente utilizo 2 campos:
order_id, order_date,
el 2º tiene formato datetime
Quiero obtener la cantidad de ordenes por mes desde hace 1 año, tambien para uso de una grafica, necesito saber de los 12 montos obtenidos, cual es el mayor.
Código PHP:
SELECT COUNT(order_id)AS cantidadorder_dateMONTH(order_date)AS mes
FROM orders 
WHERE order_date
>=date_sub(CURDATE(),INTERVAL 12 month)
GROUP BY MONTH(order_date)
ORDER BY order_date ASC 
__________________
I am Doyle please insert code.
  #4 (permalink)  
Antiguo 15/07/2009, 13:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

Código sql:
Ver original
  1. SELECT SUM(t1.cantidad) FROM
  2. (SELECT COUNT(order_id)AS cantidad, order_date,
  3. MONTH(order_date)AS mes
  4. FROM orders  
  5. WHERE order_date>=date_sub(CURDATE(),INTERVAL 12 MONTH)
  6. GROUP BY MONTH(order_date)
  7. ORDER BY order_date ASC  )t1;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 15/07/2009, 14:06
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

Bueno creo que en vez de SUM debo usar MAX para obtener el valor maximo los obtenidos, tambien agregé un alias en el 1º select, para poder usarlo en php resultado final:
Código PHP:
SELECT sum(orders.cantidad)as tope FROM (
SELECT COUNT(order_id)AS cantidadorder_dateMONTH(order_date)AS mes,
MONTH(date_subCURDATE( ) , INTERVAL 11 MONTH )) AS mesInicio
FROM orders 
WHERE order_date
>=date_sub(CURDATE(),INTERVAL 12 month)
GROUP BY MONTH(order_date)
ORDER BY order_date ASC 
)orders 
Thanxz huesos52 !!
__________________
I am Doyle please insert code.
  #6 (permalink)  
Antiguo 15/07/2009, 14:18
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

Upsss! surgió un problema, ¿puede ser que haya perdido los campos del 2º select?
porque solo puedo mostrar tope, el resto no.
__________________
I am Doyle please insert code.
  #7 (permalink)  
Antiguo 15/07/2009, 22:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

también los puedes sacar,

Código sql:
Ver original
  1. SELECT orders.cantidad,orders.order_date,orders.mesInicio,SUM(orders.cantidad)AS tope FROM (
  2. SELECT COUNT(order_id)AS cantidad, order_date, MONTH(order_date)AS mes,
  3. MONTH(date_sub( CURDATE( ) , INTERVAL 11 MONTH )) AS mesInicio
  4. FROM orders  
  5. WHERE order_date>=date_sub(CURDATE(),INTERVAL 12 MONTH)
  6. GROUP BY MONTH(order_date)
  7. ORDER BY order_date ASC  
  8. )orders  GROUP BY orders.campo_que_quieras.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 16/07/2009, 13:53
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

Bueno, surgio otro problemilla, todavia es en el campo "tope":
La subconsulta me trae 4 registros donde sus valores no se podrian agrupar (group by) por ser todos diferentes(obvio que igual se utiliza).
Por lo tanto en la consulta "externa", el SUM no suma los valores de orders.cantidad de los 4 registros, sino toma los 4 valores por separado, mostrando en pantalla, en el campo tope 4 valores iguales a los que aparecen en el campo cantidad.
Código PHP:
SELECT orders.cantidadorders.order_dateorders.mesorders.mesInicio
orders.anioInicioSUM(orders.cantidad)as tope FROM(
SELECT COUNT(order_id)AS cantidadorder_dateMONTH(order_date)AS mes,
MONTH(date_subCURDATE( ) , INTERVAL 11 MONTH )) AS mesInicio,
YEAR(order_date)AS anioInicio
FROM orders 
WHERE order_date
>=date_sub(CURDATE(),INTERVAL 12 month)
GROUP BY MONTH(order_date)
ORDER BY order_date ASC
)orders GROUP BY MONTH(orders.order_dateORDER BY orders.order_date ASC 
El resto de los campos me funciona de maravilla, me faltaría eso.
Gracias!
__________________
I am Doyle please insert code.
  #9 (permalink)  
Antiguo 16/07/2009, 13:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

No te entendí.

Pero prueba agrupando por todos los campos de la consulta externa.
GROUP BY MONTH(orders.order_date),orders.cantidad,
orders.mes,orders.mesInicio,orders.anioInicio
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 16/07/2009, 14:17
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

una imagen vale más que mil palabras, la subconsulta me trae estos registros:
http://img39.imageshack.us/img39/7785/selectiong.jpg
Como podria obtener el SUM del campo cantidad?
probe el group by pero sige sin sumar...
__________________
I am Doyle please insert code.
  #11 (permalink)  
Antiguo 16/07/2009, 14:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

Regalame lo siguiente:

create table orders(id.... etc etc);

Unos cuantos inserts
insert into orders values(valores);


Con eso te ayudo a probar.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 16/07/2009, 14:36
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

La tabla:
Código PHP:
CREATE TABLE `orders` (
  `
order_idint(7unsigned NOT NULL auto_increment,
  `
order_ipchar(15collate latin1_spanish_ci NOT NULL,
  `
order_useridint(7unsigned default NULL,
  `
checkoutint(1unsigned NOT NULL default '0',
  `
publicint(1unsigned NOT NULL default '1',
  `
order_citychar(50collate latin1_spanish_ci NOT NULL,
  `
order_statechar(50collate latin1_spanish_ci NOT NULL,
  `
order_zipchar(10collate latin1_spanish_ci NOT NULL,
  `
order_weightchar(3collate latin1_spanish_ci NOT NULL default '',
  `
order_size_promchar(3collate latin1_spanish_ci NOT NULL default '',
  `
order_upscodedate default NULL,
  `
order_datedatetime default NULL,
  `
order_pricedecimal(10,2) default NULL,
  `
order_taxdecimal(10,2) default NULL,
  `
order_ship_pricedecimal(10,2) default NULL,
  `
totaldecimal(10,2) default NULL,
  `
estadochar(20character set latin1 NOT NULL,
  
PRIMARY KEY  (`order_id`),
  
FULLTEXT KEY `ip` (`order_ip`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1051 
registros:
Código PHP:
INSERT INTO `ordersVALUES (198'127.0.0.1'111'''''''0''0''2008-09-04''2009-07-14 00:00:00'4.00

0.000.004.00'entregado');
INSERT INTO `ordersVALUES (199'127.0.0.1'111'''''''0''0''2009-05-07''2008-09-15 00:00:00'3.00

0.000.003.00'entregado');
INSERT INTO `ordersVALUES (200'127.0.0.1'111'''''''0''0''0000-00-00''2008-09-15 00:00:00'6.00

0.000.006.00'pendiente');
INSERT INTO `ordersVALUES (419'192.168.1.140'8111'SAN FRANCISCO''NY''111-222-19''0''0''0000-00-00'

'2009-05-19 18:47:43'2.000.000.002.00'pendiente');
INSERT INTO `ordersVALUES (425'192.168.1.140'8111'SAN FRANCISCO''NY''111-222-19''0''0''0000-00-00'

'2009-05-19 18:47:55'2.000.000.002.00'pendiente');
INSERT INTO `ordersVALUES (428'192.168.1.140'8111'SAN FRANCISCO''NY''111-222-19''0''0''0000-00-00'

'2009-05-19 18:48:02'2.000.000.002.00'pendiente');
INSERT INTO `ordersVALUES (445'192.168.1.140'111'SAN FRANCISCO''NY''111-222-19''0''0''0000-00-00'

'2009-05-19 18:48:15'2.000.000.002.00'pendiente');
INSERT INTO `ordersVALUES (481'192.168.1.140'1411'SAN FRANCISCO''NY''''0''0''0000-00-00''2009-05-26 

18:27:08'
0.000.000.000.00'pendiente');
INSERT INTO `ordersVALUES (482'192.168.1.140'1411'''''''0''0''0000-00-00''2009-05-26 18:27:11'0.00

0.000.000.00'pendiente');
INSERT INTO `ordersVALUES (484'192.168.1.140'1411'SAN FRANCISCO''NY''''0''0''0000-00-00''2009-05-26 

18:27:16'
0.000.000.000.00'pendiente');
INSERT INTO `ordersVALUES (487'192.168.1.140'1411'SAN FRANCISCO''NY''''0''0''0000-00-00''2009-05-26 

18:27:23'
0.000.000.000.00'pendiente');
INSERT INTO `ordersVALUES (488'192.168.1.140'1411'SAN FRANCISCO''NY''''0''0''0000-00-00''2009-05-26 

18:27:26'
0.000.000.000.00'pendiente'); 
__________________
I am Doyle please insert code.
  #13 (permalink)  
Antiguo 16/07/2009, 15:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: max luego de count

doylelives

Para realizar una suma, se requiere tener establecido el parametro de agrupamiento que debe respetar si existen mas campos.

si lo que necesitas es algo así:

Código sql:
Ver original
  1. +----------+---------------------+------+-----------+------------+-----------------------------------------+
  2. |        9 | 2009-05-19 18:47:43 |    5 |         8 |       2009 |                                      12 |
  3. |        1 | 2009-07-14 00:00:00 |    7 |         8 |       2009 |                                      12 |
  4. |        2 | 2008-09-15 00:00:00 |    9 |         8 |       2008 |                                      12 |
  5. +----------+---------------------+------+-----------+------------+-----------------------------------------+

te recomendaría hacer una vista de la consulta y posteriormente, llamar la suma de la vista creada.

Código sql:
Ver original
  1. mysql> CREATE VIEW orders_view AS SELECT COUNT(order_id)AS cantidad, order_date, MONTH(order_date)AS mes,
  2.     -> MONTH(date_sub( CURDATE() , INTERVAL 11 MONTH )) AS mesInicio,
  3.     -> YEAR(order_date)AS anioInicio
  4.     -> FROM orders
  5.     -> WHERE order_date>=date_sub(CURDATE(),INTERVAL 12 MONTH)
  6.     -> GROUP BY MONTH(order_date)
  7.     -> ;
  8. Query OK, 0 ROWS affected (0.02 sec)
  9. mysql>  SELECT *,(SELECT SUM(cantidad) FROM orders_view) tope FROM orders_view;
  10. +----------+---------------------+------+-----------+------------+------+
  11. | cantidad | order_date          | mes  | mesInicio | anioInicio | tope |
  12. +----------+---------------------+------+-----------+------------+------+
  13. |        9 | 2009-05-19 18:47:43 |    5 |         8 |       2009 |   12 |
  14. |        1 | 2009-07-14 00:00:00 |    7 |         8 |       2009 |   12 |
  15. |        2 | 2008-09-15 00:00:00 |    9 |         8 |       2008 |   12 |
  16. +----------+---------------------+------+-----------+------------+------+
  17. 3 ROWS IN SET (0.00 sec)

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #14 (permalink)  
Antiguo 16/07/2009, 15:23
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 10 meses
Puntos: 35
Respuesta: max luego de count

ufff ahora si funciona, gracias huesos52 !!!!
__________________
I am Doyle please insert code.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.