sql - khan - grupo por primer personaje
sequel database (7)
Tengo un problema con una consulta en Oracle SQL.
Tengo una columna first_name
en una tabla de employees
. Quiero agrupar mis registros de acuerdo con el primer carácter en first_name
.
Por ejemplo, tengo 26 registros, uno con el name = ''Alice''
, uno con el name = ''Bob''
, y así sucesivamente el alfabeto para el primer carácter de cada nombre. Después de la consulta, debe haber 26 grupos con un empleado cada uno.
Intenté lo siguiente, pero no está funcionando:
SELECT employee_id, (SUBSTR(first_name,1,1)) AS alpha FROM employees
GROUP BY alpha;
name_which_starts_from employees
A 10
B 2
C 4
D 9
E 3
G 3
H 3
I 2
J 16
K 7
L 6
M 6
N 4
O 1
P 6
R 3
S 13
T 4
V 2
W 3
Casi parece que desea que se devuelvan 26 registros con A, B, C como la primera columna y luego una segunda columna que contenga todas las ID de los empleados en una lista delimitada. Si es así, vea la pregunta 468990 y / o este enlace Ask Tom . Algo como (no probado)
SELECT SUBSTR(first_name,1,1), TO_STRING( CAST( COLLECT( employee_id ) AS ntt_varchar2 ) ) AS empIDs
FROM employees
GROUP BY
SUBSTR(first_name,1,1);
Creo que sé lo que estás tratando de hacer ...
Debe crear una pequeña tabla de referencia con una columna ''letra'' (letter, sort_order)
Usted debe su consulta como
seleccione l.letter, count (e.id) como empleados de la letra l de la combinación externa de la izquierda e en l.letter = substr (e.first_name, 1,1)
La otra respuesta publicada le dará resultados inesperados cuando no haya empleados con una letra específica en su nombre ...
Cuando se está agrupando, todas las columnas que aparecen en su lista de selección que no están agregadas también deben aparecer en la cláusula "agrupar por" (employee_id no).
¿Podría aclarar qué es lo que está tratando de hacer?
Deberá agruparse por todo lo que no sea una función agregada, por lo que no puede tener employee_id en la proyección SELECT. También necesita agrupar solo el primer carácter del primer nombre. Algo como esto debería funcionar:
SELECT SUBSTR(first_name, 1, 1) AS alpha, COUNT(*) AS employee_count
FROM employees
GROUP BY SUBSTR(first_name, 1, 1);
Eso agruparía por la primera letra del primer nombre y mostraría el número de empleados que pertenecen a ese grupo.
En Rieles / postgres que podrían verse así.
group_clause = ''UPPER(LEFT(name, 1))''
Division.group(group_clause).order(group_clause).pluck(group_clause, ''COUNT(id)'')
Su consulta es incorrecta, ya que tendría que realizar alguna función de agregación en EMPLOYEE_ID si desea que funcione.
Me gusta:
select substr(first_name,1,1) as alpha, count(employee_id)
from employees
group by substr(first_name,1,1)
¿Qué es exactamente lo que estás tratando de lograr?
Tengo un problema similar y lo resolví con una declaración:
select SUBSTR(word, 1, 1) as S, count(word) FROM table_words group by S order by S ASC