sql 语句请教

zestsnake 2021-05-19 08:52:00
有两个数据表
userdb 用户表

id name
1 张三
2 李四
3 王五



log 登陆日志表

id name logdate
1 张三 20200101
2 李四 20201201
3 张三 20200102


实现这样的统计

id name counts
1 张三 2
2 李四 1
3 王五 0


实际就是登陆的次数,没有的显示 0
...全文
242 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
塔塔庙 2021-05-21
  • 打赏
  • 举报
回复

select a.id,a.nam,b.logcount from 
(select id,name from a) a
left join
(select name,count(loge) as logcount form b group by name) b
on a.name=b.name
塔塔庙 2021-05-21
  • 打赏
  • 举报
回复

select a.id,a.nam,b.logcount from 
(select id,name from a) a
left join
(select name,count(loge) as logcount form b) b
on a.name=b.name
zestsnake 2021-05-20
  • 打赏
  • 举报
回复
是 left join

引用 6 楼 晴天8 的回复:
[quote=引用 4 楼 zestsnake 的回复:][quote=引用 2 楼 晴天8 的回复:]

with userdb(id,name) as (

select 1 ,'张三' union all
select 2 ,'李四' union all
select 3 ,'王五'
)
, log(id ,name,logdate) as
(

select 1, '张三', '20200101' union all
select 2, '李四', '20201201' union all
select 3, '张三', '20200102'
)
select t1.name,count(t2.name) as log_count
from userdb t1
left join log t2 on t1.name=t2.name
group by t1.name



结果:
name log_count
张三 2
李四 1
王五 0



不好意思再问下。你的语句我跑下来也是
1 张三 2
2 李四 1

不过我没有用with 那一块,因为数据库中有很多记录[/quote]
你看楼上,和我一样的代码,成功了,核心是你要left join,你写的是join吧,所以没有[/quote]


搞定了,谢谢,开始我就用了left join ,不过在where 语句上犯了个低级错误,稍后结贴给分,感谢各位大神指点
zestsnake 2021-05-19
  • 打赏
  • 举报
回复
引用 2 楼 晴天8 的回复:

with userdb(id,name) as (

select 1 ,'张三' union all
select 2 ,'李四' union all
select 3 ,'王五'
)
, log(id ,name,logdate) as
(

select 1, '张三', '20200101' union all
select 2, '李四', '20201201' union all
select 3, '张三', '20200102'
)
select t1.name,count(t2.name) as log_count
from userdb t1
left join log t2 on t1.name=t2.name
group by t1.name



结果:
name log_count
张三 2
李四 1
王五 0



不好意思再问下。你的语句我跑下来也是
1 张三 2
2 李四 1

不过我没有用with 那一块,因为数据库中有很多记录
RINK_1 2021-05-19
  • 打赏
  • 举报
回复
引用 7 楼 RINK_1 的回复:
[quote=引用 3 楼 晴天8 的回复:][quote=引用 1 楼 RINK_1 的回复:]SELECT A.ID,A.NAME,ISNULL(COUNT(*),0) AS COUNTS FROM USERDB A JOIN LOG B ON A.NAME=B.NAME GROUP BY A.ID,A.NAME
你的运行结果是: ID NAME COUNTS 1 张三 2 2 李四 1[/quote] 搞错了,应该是LEFT JOIN[/quote] 恩,你是对的,还忘记NULL会参与COUNT(*)计算的,应该像你一样直接用COUNT(B.NAME)
RINK_1 2021-05-19
  • 打赏
  • 举报
回复
引用 3 楼 晴天8 的回复:
[quote=引用 1 楼 RINK_1 的回复:]SELECT A.ID,A.NAME,ISNULL(COUNT(*),0) AS COUNTS FROM USERDB A JOIN LOG B ON A.NAME=B.NAME GROUP BY A.ID,A.NAME
你的运行结果是: ID NAME COUNTS 1 张三 2 2 李四 1[/quote] 搞错了,应该是LEFT JOIN
晴天8 2021-05-19
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:
SELECT A.ID,A.NAME,ISNULL(COUNT(*),0) AS COUNTS FROM USERDB A JOIN LOG B ON A.NAME=B.NAME GROUP BY A.ID,A.NAME
你的运行结果是: ID NAME COUNTS 1 张三 2 2 李四 1
晴天8 2021-05-19
  • 打赏
  • 举报
回复

with userdb(id,name) as (

select 1 ,'张三'  union all
 select 2 ,'李四' union all
 select 3 ,'王五'
)
, log(id ,name,logdate) as 
(

select 1,     '张三',      '20200101' union all
select 2,    '李四',       '20201201' union all
select 3,    '张三',      '20200102'
)
select t1.name,count(t2.name) as log_count
from userdb t1 
left join log t2 on t1.name=t2.name
group by t1.name

结果: name log_count 张三 2 李四 1 王五 0
RINK_1 2021-05-19
  • 打赏
  • 举报
回复
SELECT A.ID,A.NAME,ISNULL(COUNT(*),0) AS COUNTS FROM USERDB A JOIN LOG B ON A.NAME=B.NAME GROUP BY A.ID,A.NAME
晴天8 2021-05-19
  • 打赏
  • 举报
回复
引用 4 楼 zestsnake 的回复:
[quote=引用 2 楼 晴天8 的回复:]

with userdb(id,name) as (

select 1 ,'张三'  union all
 select 2 ,'李四' union all
 select 3 ,'王五'
)
, log(id ,name,logdate) as 
(

select 1,     '张三',      '20200101' union all
select 2,    '李四',       '20201201' union all
select 3,    '张三',      '20200102'
)
select t1.name,count(t2.name) as log_count
from userdb t1 
left join log t2 on t1.name=t2.name
group by t1.name

结果: name log_count 张三 2 李四 1 王五 0
不好意思再问下。你的语句我跑下来也是 1 张三 2 2 李四 1 不过我没有用with 那一块,因为数据库中有很多记录[/quote] 你看楼上,和我一样的代码,成功了,核心是你要left join,你写的是join吧,所以没有
爱喝茶的助手 2021-05-19
  • 打赏
  • 举报
回复

select t1.PeopleName,count(t2.PeopleName) from Table1 t1 left join Table2 t2 on t1.PeopleName=t2.PeopleName group by t1.PeopleName

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧