查询JOIN并计数Postgresql

时间:2016-08-02 22:24:04

标签: mysql sql postgresql join left-join

我使用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        |
+--------+---------------+

我可以在b_table和desc上为count free_value写一个查询来计算吗?

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但这不起作用。

感谢您的帮助。我对此很愚蠢。

3 个答案:

答案 0 :(得分:1)

请尝试org.wso2.siddhi.core.exception.ExecutionPlanRuntimeException: Cannot Execute Insert/Update. Null value detected for attributemeta_DATA ; COUNT(b_table.id)计算遇到的所有非空值,这就是为什么(我猜)你为不匹配的COUNT得到1;因为不匹配的值在其行中仍然有自己的值。

编辑:此外,我们的回答也是正确的,因为您需要free_values否则,您将获得JOIN的总行数,并有效地随机选择group by free_value

答案 1 :(得分: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

答案 2 :(得分: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

尝试此查询。