2016-08-02 3 views
0

Я использую Postgresql. У меня есть таблица & б как этотЗапрос JOIN AND Count ON Postgresql

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

Могу ли я написать запрос для подсчета free_value на b_table и по алфавиту считать, как это?

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

'SELECT free_value, count (*) from a_table LEFT JOIN b_table ON a_table.id = b_table.a_table_id group by free_value' – are

ответ

1

Попробуйте COUNT(b_table.id) вместо этого; COUNT подсчитывает все ненулевые значения, поэтому (я предполагаю) вы получали 1 для непревзойденного free_values; потому что непревзойденные значения по-прежнему имеют свои собственные значения в своих строках.

Редактировать: Кроме того, комментарий пользователя и ответ Алима также верны в том, что вам нужно group by free_value. В противном случае вы получите полные строки 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

Я меняю счет (free_value) на счет (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 

попробовать этот запрос.