2009-03-20 25 views
24

Oracle SQLの問合せに問題があります。グループの先頭文字

私はemployeesテーブルにfirst_nameの列を持っています。私はfirst_nameの最初の文字に従って自分のレコードをグループ化したいと思います。

たとえば、私はname = 'Alice'で1つ、name = 'Bob'で1つ、などの26レコードを持っています。クエリの後には、それぞれ1人の従業員を含む26のグループが存在する必要があります。

私は次のことを試してみましたが、それは働いていない:

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 
+1

SQL Servの同様の質問に対する次のリンクを参照してくださいer: http://stackoverflow.com/questions/13500638/sql-how-many-records-start-with-the-same-letter –

答えて

52

あなたはそれが仕事をしたい場合は、EMPLOYEE_IDに、いくつかの集計関数を実行する必要がありますので、あなたのクエリは、間違っています。

同様:

select substr(first_name,1,1) as alpha, count(employee_id) 
    from employees 
group by substr(first_name,1,1) 

あなたが達成しようとしている正確にどのような?

+1

あなたはそれを公正で正方形に打つ。ほとんど同じクエリー。 – yukondude

+1

Hehehehehe ...ああ。とにかくあなたに投票しました;-) –

+0

ありがとうございました。私は私の結果を得た.thnkあなたは大いに –

6

集計関数ではないものすべてをグループ化する必要があるため、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); 

1

グループ化しているときに、選択リストに集計されていない列はすべて「グループ化」句にも表示されなければなりません(employee_idは表示されません)。

あなたは何をしようとしているのかを明確にすることはできますか?あなたが列「文字」と小さな参照テーブルを作成する必要があり、私は私はあなたがやろうとしているか知っていると思う

0

...

(手紙、SORT_ORDER)

あなたは

としてあなたの問い合わせをします

選択l.letter、文字l から従業員 がl.letter = SUBSTR(e.first_name、1,1)上の従業員の電子を外部結合を残したとして(e.id)を数える

掲載他の答えが得られますあなたは予想外でした名前に特定の文字が含まれていない従業員がいる場合の結果...

+0

ありがとうございます。私は私の結果を得た.thnkあなたは非常に –

2

A、B、Cを最初の列として返し、次に2番目の列にはすべての従業員IDが含まれています。区切りリスト。もしそうなら、質問468990および/またはthis Ask Tom linkを見てください。この

group_clause = 'UPPER(LEFT(name, 1))' 
Division.group(group_clause).order(group_clause).pluck(group_clause, 'COUNT(id)') 
+0

ありがとう。私は私の結果を得た.thnkあなたは非常に –

0

ような何か私は同様の問題を持っていると声明でそれこれを解決:

select SUBSTR(word, 1, 1) as S, count(word) FROM table_words group by S order by S ASC

output

0

ようになりますRailsの/ postgresの中(未テスト)

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); 
関連する問題