2016-08-02 13 views
0

私はPostgresqlを使用します。私はb_tableとDESCのカウントfree_valueのクエリを記述することができ、このPostgreSQLへのJOINとカウントの問い合わせ

a_table 
+--------+---------------+ 
| id | free_value | 
+--------+---------------+ 
| 1 |  3  | 
| 2 |  2  | 
| 3 |  1  | 
| 4 |  3  | 
| 5 |  2  | 
| 6 |  8  | 
| 7 |  4  | 
+--------+---------------+ 

b_table 
+--------+---------------+ 
| id | a_table_id | 
+--------+---------------+ 
| 1 |  2  | 
| 2 |  2  | 
| 3 |  6  | 
| 4 |  5  | 
| 5 |  3  | 
| 6 |  3  | 
+--------+---------------+ 

よう& Bテーブルは次のようにカウントする必要がありますか?

count_free_value_table 
+----------------+-----------+ 
| free_value | count | 
+----------------+-----------+ 
|  2  |  3  | 
|  1  |  2  | 
|  8  |  1  | 
|  3  |  0  | 
|  4  |  0  | 
+----------------+-----------+ 

私は試してみてくださいSELECT free_value, count(free_value) from a_table LEFT JOIN b_table ON a_table.id = b_table.a_table_idしかし、それは仕事ではありません。

ありがとうございました。私はこれのために愚かです。

+1

'a_tableからのfree_value、count(*)の選択LEFT JOIN b_table ON a_table.id = b_table.a_table_idグループby free_value' – are

答えて

1

代わりにCOUNT(b_table.id)を試してください。 COUNTは、遭遇したすべての非ヌル値をカウントします。そのため、(あなたは推測していますが)不一致のために1を得ていた理由はfree_valuesです。一致しない値は引き続き行内に独自の値を持つためです。

編集:また、あなたの答えはgroup by free_valueであるという点で、Alimの答えも正しいです。 それ以外の場合は、JOINの合計行を取得し、実質的にランダムに選択してfree_valueを取得します。

+0

そうです。ご協力ありがとうございます。 –

1

SELECT free_value, count(free_value) 
from a_table LEFT JOIN b_table ON a_table.id = b_table.a_table_id 
group by free_value 
+0

は 'free_value'をカウントして参照を持たない値に1を返します。 – Uueerdo

+0

私はcount(free_value)をcount(b_table.id)に変更し、@Uueerdoもうまく動作します。ご協力ありがとうございます。 –

0
SELECT free_value, count(b_table.id) count 
FROM a_table 
LEFT JOIN b_table ON a_table.id = b_table.a_table_id 
GROUP BY free_value 
ORDER BY count DESC 

は、このクエリを試してみてください。

関連する問題