Siempre primero pensar en crear el modelo de datos normalizando la información. En este caso crear la tabla de turnos, luego en armar la consulta:
Código SQL
[-]
DROP TABLE IF EXISTS TURNO;
CREATE TABLE TURNO
(
ID_TURNO INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "Identificador único de registro",
DESCRIPCION VARCHAR(100) NOT NULL COMMENT "Descripción del turno",
DESDE TIME NOT NULL,
HASTA TIME NOT NULL,
PRIMARY KEY PK_TURNO (ID_TURNO)
);
INSERT INTO TURNO (DESCRIPCION, DESDE, HASTA) VALUES
('Amanecida', '00:01', '06:00'),
('Mañana', '06:01', '12:00'),
('Tarde', '12:01', '18:00'),
('Noche', '18:01', '24:00');
SELECT DESCRIPCION, COUNT(*)
FROM TURNO
JOIN VENTA ON TIME(FECHA) BETWEEN TURNO.DESDE AND TURNO.HASTA
GROUP BY TURNO.DESCRIPCION;
Ese ejemplo funciona en MySql.
PD: Le agregaría a la tabla TURNO un trigger de validación que no permita dos turnos en el mismo rango, y que el rango sea válido.
Saludos