Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从一个表中选择列并从另一个表中选择计数_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

Sql 从一个表中选择列并从另一个表中选择计数

Sql 从一个表中选择列并从另一个表中选择计数,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,期望输出: t1 id | name | include ------------------- 1 | foo | true 2 | bar | true 3 | bum | false t2 id | some | table_1_id ------------------------- 1 | 42 | 1 2 | 43 | 1 3 | 42 | 2 4 | 44 | 1 5 | 44 | 3

期望输出:

t1

id | name | include
-------------------
1  | foo  |  true
2  | bar  |  true
3  | bum  |  false

t2

id | some | table_1_id
-------------------------
1  | 42   |     1
2  | 43   |     1
3  | 42   |     2
4  | 44   |     1
5  | 44   |     3
我目前从其他解决方案中了解到:

name | count(some)
------------------
foo  | 3
bar  | 1
但这似乎让我明白了

    SELECT      a.name, 
            COUNT(r.some)

FROM        t1 a
JOIN  t2 r on a.id=r.table_1_id
WHERE       a.include = 'true' 

GROUP BY    a.id,
            r.some;

我不是sql专家(我可以做简单的查询),所以我也在谷歌上搜索,但找到的大多数解决方案都会给我这个结果。我可能遗漏了一些非常简单的内容。

只需从
group by
子句中删除第二列即可

name | count(r.some)
--------------------
foo  | 1
foo  | 1
bar  | 1
foo  | 1

要在聚合函数(如
sum()
count()
中使用的列必须排除在
group by
子句之外。只将要唯一输出的列放入其中。

这是因为多列组要求所有列的值都相同。

有关详细信息,请参阅此链接

实际上,在您的例子中,如果一些是相等的,那么表1的id就不相等(反之亦然)。因此,分组不可能发生。因此,所有这些都是单独显示的

如果条目是这样的

SELECT      a.name, 
            COUNT(r.some)    
FROM        t1 a
JOIN  t2 r on a.id=r.table_1_id
WHERE       a.include = 'true' 
GROUP BY    a.name
那么输出就会是

id | some | table_1_id
-------------------------
1  | 42   |     1
2  | 43   |     1
3  | 42   |     2
4  | 42   |     1

实际上,如Juergen所说,如果您想在1列上分组,您可以删除
r.some来自groupby子句。

啊,这很有道理!您正在拉取
a.name
列,即使您没有对其进行分组–这会在Oracle中编译吗?感谢阅读链接,现在它更有意义了。希望我能打两个复选标记:(
name | count
------------------
foo  | 2     (for 42)
foo  | 1     (for 43)
bar  | 1     (for 42)