|zyciis| 求SQL统计更新语句 急。。 万分感谢

zyciis71 2012-03-08 04:21:58
如我有
评论表
ID 视频ID 评论内容 评论时间
1 1 还行 2012-03-07 12:01:02
2 1 不行 2012-03-08 13:11:22
3 2 不错 2012-03-08 12:14:26

然后有
点击率表
ID 视频ID 点击时间
1 1 2012-03-07 01:02:03
2 1 2012-03-08 15:04:09
3 3 2012-03-08 18:12:14

然后有统计表根据上面得出结果
视频统计表
视频ID 日点击量 日评论量 周点击量 周评论量
1 1 1 2 2
2 0 1 0 1
3 1 0 1 0

也就是根据上面两个表的视频信息更新到统计表内
可能出现的情况为:更新统计评论量时,有些视频信息在统计表中已经有了有些统计信息没有

那这两条SQL要怎么写呢

谢谢

...全文
227 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zyciis71 的回复:]

回复楼上的:
上面的方法是Select出来
那我是不是每次都先删除“统计表”
然后再Insert Into ... Select ...
这种方式添加呢?
也就是每次都全删除了,再全总进行统计?
[/Quote]
把查询结果写成视图,然后调用视图就可以了。
_0筱筱0_ 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zyciis71 的回复:]

回复楼上的:
上面的方法是Select出来
那我是不是每次都先删除“统计表”
然后再Insert Into ... Select ...
这种方式添加呢?
也就是每次都全删除了,再全总进行统计?
[/Quote]
如果统计表里只有这些信息,可以考虑这样。
zyciis71 2012-03-08
  • 打赏
  • 举报
回复
回复楼上的:
上面的方法是Select出来
那我是不是每次都先删除“统计表”
然后再Insert Into ... Select ...
这种方式添加呢?
也就是每次都全删除了,再全总进行统计?
dawugui 2012-03-08
  • 打赏
  • 举报
回复
create table 评论表(ID int,视频ID int,评论内容 varchar(20),评论时间 datetime)
insert into 评论表 values(1, 1 ,'还行', '2012-03-07 12:01:02')
insert into 评论表 values(2, 1 ,'不行', '2012-03-08 13:11:22')
insert into 评论表 values(3, 2 ,'不错', '2012-03-08 12:14:26')
create table 点击率表(ID int,视频ID int,点击时间 datetime)
insert into 点击率表 values(1, 1 ,'2012-03-07 01:02:03')
insert into 点击率表 values(2, 1 ,'2012-03-08 15:04:09')
insert into 点击率表 values(3, 3 ,'2012-03-08 18:12:14')
go

select isnull(isnull(isnull(t1.视频ID,t2.视频ID),t3.视频ID),t4.视频ID) 视频ID,
isnull(t1.日点击量,0) 日点击量,
isnull(t2.日评论量,0) 日评论量,
isnull(t3.周点击量,0) 周点击量,
isnull(t4.周评论量,0) 周评论量
from
(select 视频ID , count(1) 日点击量 from 点击率表 where datediff(dd,getdate(),点击时间) = 0 group by 视频ID) t1
full join
(select 视频ID , count(1) 日评论量 from 评论表 where datediff(dd,getdate(),评论时间) = 0 group by 视频ID) t2
on t1.视频ID = t2.视频ID
full join
(select 视频ID , count(1) 周点击量 from 点击率表 where datediff(week,getdate(),点击时间) = 0 group by 视频ID) t3
on isnull(t1.视频ID,t2.视频ID) = t3.视频ID
full join
(select 视频ID , count(1) 周评论量 from 评论表 where datediff(week,getdate(),评论时间) = 0 group by 视频ID) t4
on isnull(isnull(t1.视频ID,t2.视频ID),t3.视频ID) = t4.视频ID

drop table 评论表 ,点击率表
/*
视频ID 日点击量 日评论量 周点击量 周评论量
----------- ----------- ----------- ----------- -----------
1 1 1 2 2
2 0 1 0 1
3 1 0 1 0

(所影响的行数为 3 行)
*/
叶子 2012-03-08
  • 打赏
  • 举报
回复
--修正一下
--> 测试数据: @评论表
declare @评论表 table (ID int,视频ID int,评论内容 varchar(4),评论时间 datetime)
insert into @评论表
select 1,1,'还行','2012-03-07 12:01:02' union all
select 2,1,'不行','2012-03-08 13:11:22' union all
select 3,2,'不错','2012-03-08 12:14:26'

--> 测试数据: @点击率表
declare @点击率表 table (ID int,视频ID int,点击时间 datetime)
insert into @点击率表
select 1,1,'2012-03-07 01:02:03' union all
select 2,1,'2012-03-08 15:04:09' union all
select 3,3,'2012-03-08 18:12:14'

SELECT ISNULL(a.视频ID, b.视频ID) AS 视频ID ,
ISNULL(a.当天评论, 0) AS 当天评论 ,
ISNULL(a.一周内评论, 0) AS 一周内评论 ,
ISNULL(b.当天点击, 0) AS 当天点击 ,
ISNULL(b.一周内点击, 0) AS 一周内点击
FROM ( SELECT 视频ID ,
SUM(CASE WHEN DATEDIFF(d, 评论时间, GETDATE()) = 0 THEN 1
ELSE 0
END) AS 当天评论 ,
SUM(CASE WHEN DATEDIFF(d, 评论时间, GETDATE()) < 7 THEN 1
ELSE 0
END) AS 一周内评论
FROM @评论表
GROUP BY 视频ID
) a
FULL JOIN ( SELECT 视频ID ,
SUM(CASE WHEN DATEDIFF(d, 点击时间, GETDATE()) = 0
THEN 1
ELSE 0
END) AS 当天点击 ,
SUM(CASE WHEN DATEDIFF(d, 点击时间, GETDATE()) < 7
THEN 1
ELSE 0
END) AS 一周内点击
FROM @点击率表
GROUP BY 视频ID
) b ON a.视频ID = b.视频ID
/*
视频ID 当天评论 一周内评论 当天点击 一周内点击
----------- ----------- ----------- ----------- -----------
1 1 2 1 2
2 1 1 0 0
3 0 0 1 1
*/
灬重来灬 2012-03-08
  • 打赏
  • 举报
回复
偷师来的
叶子 2012-03-08
  • 打赏
  • 举报
回复

--> 测试数据: @评论表
declare @评论表 table (ID int,视频ID int,评论内容 varchar(4),评论时间 datetime)
insert into @评论表
select 1,1,'还行','2012-03-07 12:01:02' union all
select 2,1,'不行','2012-03-08 13:11:22' union all
select 3,2,'不错','2012-03-08 12:14:26'

--> 测试数据: @点击率表
declare @点击率表 table (ID int,视频ID int,点击时间 datetime)
insert into @点击率表
select 1,1,'2012-03-07 01:02:03' union all
select 2,1,'2012-03-08 15:04:09' union all
select 3,3,'2012-03-08 18:12:14'

SELECT a.*,b.当天点击,b.一周内点击 FROM (
SELECT ID ,
SUM(CASE WHEN DATEDIFF(d, 评论时间, GETDATE()) = 0 THEN 1
ELSE 0
END) AS 当天评论 ,
SUM(CASE WHEN DATEDIFF(d, 评论时间, GETDATE()) < 0 THEN 1
ELSE 0
END) AS 一周内评论
FROM @评论表
GROUP BY ID
) a LEFT JOIN (
SELECT ID ,
SUM(CASE WHEN DATEDIFF(d, 点击时间, GETDATE()) = 0 THEN 1
ELSE 0
END) AS 当天点击 ,
SUM(CASE WHEN DATEDIFF(d, 点击时间, GETDATE()) < 0 THEN 1
ELSE 0
END) AS 一周内点击
FROM @点击率表
GROUP BY ID) b ON a.id=b.id
/*
ID 当天评论 一周内评论 当天点击 一周内点击
----------- ----------- ----------- ----------- -----------
1 0 0 0 0
2 1 0 1 0
3 1 0 1 0
*/
唵嘛呢叭咪吽 2012-03-08
  • 打赏
  • 举报
回复

学习学习
sweetbbs 2012-03-08
  • 打赏
  • 举报
回复
你总得知道是哪日,哪周的评论量吧
内容概要:本文详细介绍了MySQL中InnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其中表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作中涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文中提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用中的限制条件以避免设计失误。
内容概要:本文系统介绍了GitHub Copilot的实战使用技巧,涵盖其核心功能、提示工程、上下文管理、自定义配置及常见误区。文章强调Copilot不仅是代码补全工具,更是覆盖软件开发全生命周期的AI编程助手,重点讲解如何通过上下文工程、提示词结构化、斜杠命令与聊天参与者等方式提升代码生成质量,并结合实战案例展示在测试生成、代码重构、调试、文档编写等场景中的高效应用。同时指出Copilot的局限性,倡导“人为主导、AI辅助”的协作模式,强调代码审查与安全合规的重要性。; 适合人群:具备一定编程经验,希望提升开发效率的个人开发者、团队工程师及技术管理者,尤其是正在使用或计划引入AI编程工具的研发人员。; 使用场景及目标:①掌握Copilot在测试生成、代码解释、重构优化、调试排错等方面的高级用法;②学会构建高质量提示词与自定义指令,使AI输出更贴合项目规范;③规避常见使用陷阱,实现安全、可控、高效的AI辅助开发。; 阅读建议:此文档兼具理论指导与实操示范,建议结合实际开发环境边学边练,重点关注提示工程、上下文管理与自定义指令配置,持续迭代优化使用方式,并在团队中建立统一的AI编码规范与审查机制。

34,875

社区成员

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

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