Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Contar los registros visibles cuando se usa GROUP BY (https://www.clubdelphi.com/foros/showthread.php?t=82519)

lmpadron 14-03-2013 17:05:02

Contar los registros visibles cuando se usa GROUP BY
 
Hola comunidad

Tengo una tabla de la cual necesito obtener cierta informacion. Dicha informacion la obtengo usando
un GROUP BY qP:-) pero el problema es que necesito solo saber el numero de registros y al usar COUNT(*) se
me cuentan todos los registros. para que se vea mejor he decidido postear una tabla mas sencilla
donde a simple vista se vea el resultado. En esta tabla hay varios registros por turno, por fecha.
Lo que quiero es saber cuantos turnos se trabajaron por fecha pero sin los repetidos o sea para una
fecha X solo pueden trabajarse 3 turnos el 1 el 2 y el 3, aunque hallan varios 1 o 2 o 3.
Al usar en la tabla de abajo esta sentencia
Código SQL [-]
SELECT * FROM `test`.`esquema` WHERE conv = 1 GROUP BY fecha, turno;
Obtengo 6 registros con los Ids 1, 4, 7, 10, 11, 12 que son los que debo obtener, pero esta
sentencia sql forma parte de otra mucho mas compleja por lo que esta solo debe devolverme el
total de registros, sin embargo al usar un COUNT(*) me cuenta todos los registros :( , los que se
ven y los que no :eek: . Me imagino esto sea por el funcionamiento del GROUP BY v\||/ . Alguna idea de como
obtener el numero de registros ???

Gracias por la ayuda !!!


Código SQL [-]
DROP TABLE IF EXISTS `esquema`;
CREATE TABLE `esquema` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `conv` varchar(45) NOT NULL,
  `orden` varchar(45) NOT NULL,
  `fecha` varchar(45) NOT NULL,
  `turno` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `esquema`
--

/*!40000 ALTER TABLE `esquema` DISABLE KEYS */;
INSERT INTO `esquema` (`id`,`conv`,`orden`,`fecha`,`turno`) VALUES 
 (1,'1','1','2013-03-11','1'),
 (2,'1','2','2013-03-11','1'),
 (3,'1','3','2013-03-11','1'),
 (4,'1','4','2013-03-11','2'),
 (5,'1','5','2013-03-11','2'),
 (6,'1','6','2013-03-11','2'),
 (7,'1','7','2013-03-11','3'),
 (8,'1','8','2013-03-11','3'),
 (9,'1','9','2013-03-11','3'),
 (10,'1','10','2013-03-12','1'),
 (11,'1','11','2013-03-12','2'),
 (12,'1','12','2013-03-13','3');
/*!40000 ALTER TABLE `esquema` ENABLE KEYS */;

VictorPenyalver 14-03-2013 17:25:22

He probado esto en Oracle y funciona, no sé en MySQL.
El count(distinct turno) deberia devolverte el total de turnos diferentes que tienen ordenes en esa fecha.

Código SQL [-]

SELECT fecha, count(distinct turno) 
FROM `test`.`esquema` WHERE conv = 1 
GROUP BY fecha;

lmpadron 14-03-2013 17:38:43

Si en MySQL funcina tambien pero la sentencia debe devolverme un solo resultado o sea aun así necesito la suma del
Código SQL [-]
count(distinct turno)
en estos momentos devuelve tres registros con estos valores 3, 2, 1 y lo que necesito es que me devuelva la suma de esos valores o sea 6 en un solo registro.

VictorPenyalver 14-03-2013 17:45:28

Sólo debes agrupar por fecha, no por turno.
Lo que te está dando es el total de turnos distintos por fecha.
Como tienes 3 fechas diferentes te salen esos 3 valores. Vamos, que sólo te está devolviendo un valor por fecha.

lmpadron 14-03-2013 18:05:25

Exacto... sin embargo lo que necesito es el total. O sea la suma delos valores que me esta mostrando por fecha. Normalmente usaria el Count(*) pero no funciona :( Necesitaria algo como esto ...
Código SQL [-]
SELECT SUM(
SELECT count(distinct turno) FROM `test`.`esquema` WHERE conv = 1 GROUP BY fecha) as suma;

Que me devuelva solo el resultado o sea 6. Pero no funciona :´(

Código SQL [-]
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT count(distinct turno) FROM `test`.`esquema` WHERE conv = 1 GROUP BY fecha' at line 2

Esta sentencia forma parte de una sentencia mucho mas grande por lo que no puede devolverme mas de un registro de resultado. O Sea aunque me devuelva una por fecha voy a necesitar sumas eso que me esta devolviendo por fecha !!!

lmpadron 14-03-2013 18:07:15

MUCHAS GRACIAS POR LA AYUDA hehehehehe que con tanto explicar y explicar no había agradecido apropiadamente !!!


La franja horaria es GMT +2. Ahora son las 21:54:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi