Oracle SQLのクエリに問題があります。
employees
テーブルにfirst_name
列があります。 first_name
の最初の文字に従ってレコードをグループ化したい。
たとえば、26個のレコードがあり、1つはname = 'Alice'
で、1つはname = 'Bob'
で、以下同様に各名前の最初の文字のアルファベット順に並べます。クエリの後、26人のグループがあり、それぞれに1人の従業員がいます。
私は以下を試しましたが、うまくいきません:
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
EMPLOYEE_IDを機能させるには、EMPLOYEE_IDに対していくつかの集計関数を実行する必要があるため、クエリは間違っています。
お気に入り:
select substr(first_name,1,1) as alpha, count(employee_id)
from employees
group by substr(first_name,1,1)
正確に何を達成しようとしていますか?
集約関数ではないすべてのものでグループ化する必要があるため、SELECTプロジェクションにemployee_idを含めることはできません。また、first_nameの最初の文字だけでグループ化する必要があります。このようなものはうまくいくはずです:
SELECT SUBSTR(first_name, 1, 1) AS alpha, COUNT(*) AS employee_count
FROM employees
GROUP BY SUBSTR(first_name, 1, 1);
これは、名の最初の文字でグループ化し、そのグループに属する従業員の数を示します。
最初の列としてA、B、Cを含む26個のレコードを返し、2番目の列にはすべての従業員IDが区切られたリストで含まれているように思われます。その場合は、質問468990および/または this Ask Tom link を参照してください。のような(試されていない)
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);
Rails/postgresでは次のようになります
group_clause = 'UPPER(LEFT(name, 1))'
Division.group(group_clause).order(group_clause).pluck(group_clause, 'COUNT(id)')
私は同様の問題を抱えており、これをステートメントで解決しました:
select SUBSTR(Word, 1, 1) as S, count(Word) FROM table_words group by S order by S ASC
グループ化する場合、選択リストに表示される集計されないすべての列は、「group by」句にも表示される必要があります(employee_idは表示されません)。
何をしようとしているのか明確にしていただけませんか?
私はあなたが何をしようとしているのか知っていると思います...
列 'letter'(letter、sort_order)を持つ小さな参照テーブルを作成する必要があります
あなたはあなたのクエリとして
l.letterを選択し、l(letter = count)の従業員としてcount(e.id)左外部結合従業員eのl.letter = substr(e.first_name、1,1)
投稿された他の回答は、名前に特定の文字が含まれている従業員がいない場合に予期しない結果になります...