我不确定如何对此进行说明,但我有两个表,我使用INNER JOIN
来计算我拥有的记录数。这很好但问题是我在table1
中有一些行,其中一些记录有一个字符串可以出现在另一个记录中。像这样:
table1 table2
------ ------
id string id table1_id some_column
01 aaa 01 01 1
02 bbb 02 02 3
03 aaa 03 03 1
04 ccc 04 04 4
05 bbb 05 05 2
... ...
我的查询如下:
SELECT COUNT(*) FROM table1
INNER JOIN table2 ON table1.id = table2.table1_id
此查询工作正常,但我希望能够获得不同的值。所以我的查询应该只返回这些记录:
table1 table2
------ ------
id string id table1_id some_column
01 aaa 01 01 1
02 bbb 02 02 3
04 ccc 04 04 4
... ...
如您所见,它不会显示共享相同字符串的任何其他记录。我会在INNER JOIN
之后或之前写些什么?任何帮助将不胜感激。
答案 0 :(得分:1)
您可以按表格分组
select count(*)
from (
select min(id) as id, string
from table1
group by string
) t1
inner join table2 on t1.id = table2.table1_id
答案 1 :(得分:1)
使用common table expression与row_number()
一起选择每组string
的前1名。
;with cte as (
select *
, rn = row_number() over (partition by string order by id)
from t1
)
select count(*)
from cte
inner join t2
on cte.id = t2.table_1id
and cte.rn = 1
使用子查询而不是cte:
select count(*)
from (
select *
, rn = row_number() over (partition by string order by id)
from t1
) sub
inner join t2
on sub.id = t2.table_1id
and sub.rn = 1
答案 2 :(得分:0)
从table1中选择DISTINCT count(*) table1.id = table2.table1_id
上的内连接table2这将为您提供表格中不同值的计数
答案 3 :(得分:0)
如果你真的只想要计数,你可以这样做:
SELECT COUNT(DISTINCT table1.string)
FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id
如果您想要使用不同的值而不仅仅计算它们,那么其他一些答案显然会更好。