找回密码
 立即注册

QQ登录

只需一步,快速开始

洪蕴哲

金牌服务用户

1

主题

8

帖子

73

积分

金牌服务用户

积分
73
QQ
最新发帖
洪蕴哲
金牌服务用户   /  发表于:2023-6-8 16:15  /   查看:1677  /  回复:7
1金币
描述:
1. 有一个【文章评论】的表,含“文章ID”、“文章评论ID”、“评论内容”、“点赞”、“评论用户”,用于记录用户对哪些文章评论或点赞了;
2. 有一个【文章库】的表,含“文章ID”、“文章标题”、“是否上架”,用于存所有的文章;

需求:
希望生成一个【文章评论点赞查询】的视图,含“文章ID”、“文章标题”、“是否上架”、“评论数”、“点赞数”的字段,用于记录所有文章的评论数和点赞数,且“评论数”和“点赞数”需要是数值字段。

我用的语句:

SELECT "文章评论_articlecomment"."文章ID", "文章库_article"."文章标题", "文章库_article"."是否发布", CAST(COUNT("文章评论_articlecomment"."文章评论ID") AS INTEGER) AS 评论数, CAST(SUM("文章评论_articlecomment"."点赞") AS INTEGER) AS 点赞数
FROM "文章评论_articlecomment"
JOIN "文章库_article" ON "文章评论_articlecomment"."文章ID" = "文章库_article"."文章ID"
GROUP BY "文章评论_articlecomment"."文章ID"

生成的视图数据结果如下:



有2个疑问:
1. 评论数、点赞数依旧是文本字段,而不是整数字段;
2. 只显示了被评论过的文章的评论数和点赞数,而其他没有被评论过的文章,没有显示在这个视图的数据里面。


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

问题跟进: 工程中文本强制转成了数值类型,是sql中写的,但是数据库中是没有这个类型,执行视图Sql会将数据转成数字所以设计器中不知道实际类型,就显示成了文本但是实际上视图会执行,数据是数字,不是文本。

7 个回复

倒序浏览
最佳答案
最佳答案
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2023-6-8 16:15:51
来自 8#
本帖最后由 Erik.Xue 于 2023-7-3 12:19 编辑

问题跟进:

工程中文本强制转成了数值类型,是sql中写的,但是数据库中是没有这个类型,执行视图Sql会将数据转成数字所以设计器中不知道实际类型,就显示成了文本但是实际上视图会执行,数据是数字,不是文本。
回复 使用道具 举报
洪蕴哲
金牌服务用户   /  发表于:2023-6-8 17:29:44
2#
更正一下,准确需求如下:
1. 有一个【文章评论】的表,含“文章ID”、“文章评论ID”、“评论内容”、“是否点赞”(是否字段,1=是,0=否)、“评论用户”,用于记录用户对哪些文章评论或点赞了;
2. 有一个【文章库】的表,含“文章ID”、“文章标题”、“是否上架”,用于存所有的文章;

需求:
创建一个【文章评论点赞查询】的视图,含“文章ID”、“文章标题”、“是否上架”、“评论数”、“点赞数”的字段。文章“评论数”的计算规则:该“文章ID”在【文章评论】表中,“是否点赞”字段为空值的行数,如果该“文章ID”未在【文章评论】表中未出现,则“评论数”为0;“点赞数”的计算规则:该“文章ID”在【文章评论】表中,“是否点赞”字段值的求和,如果该“文章ID”未在【文章评论】表出现,则“点赞数”为0。

我用如下语句实现了:
SELECT a."文章ID", a."文章标题", a."是否发布",
       COALESCE(c."评论数", 0) AS "评论数",
       COALESCE(l."点赞数", 0) AS "点赞数"
FROM "文章库_article" a
LEFT JOIN (
  SELECT "文章ID", COUNT(*) AS "评论数"
  FROM "文章评论_articlecomment"
  WHERE "点赞" IS NULL
  GROUP BY "文章ID"
) c ON a."文章ID" = c."文章ID"
LEFT JOIN (
  SELECT "文章ID", SUM("点赞") AS "点赞数"
  FROM "文章评论_articlecomment"
  GROUP BY "文章ID"
) l ON a."文章ID" = l."文章ID"


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2023-6-8 18:10:36
3#
您好,这边推荐一个视图书写工具,可以使用此工具理清楚基础表的关系:

https://visualsql.net/

关于《评论数、点赞数依旧是文本字段,而不是整数字段》,可以先在第三方数据库工具中,比如navicat、DBeaver等工具中连接对应的数据库后,书写同样的视图,看是否字段有转换。

如果有转换,可以说明下使用的外联库是什么,是mysql还是sqlserver,版本是什么。
回复 使用道具 举报
洪蕴哲
金牌服务用户   /  发表于:2023-6-8 18:24:00
4#
Erik.Xue 发表于 2023-6-8 18:10
您好,这边推荐一个视图书写工具,可以使用此工具理清楚基础表的关系:

https://visualsql.net/

我用的内置的sqlite数据库
回复 使用道具 举报
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2023-6-9 08:58:29
5#
如果是sqlite内置库,可以用SELECT CAST("文本" as NUMERIC) as aaa FROM "表1"

转换文本为数字,在活字格里,如果数据偏右即为数字类型,数据偏左为文本类型。



如果介意可以选择使用外联数据库,如mysql、sqlserver

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
洪蕴哲
金牌服务用户   /  发表于:2023-6-9 09:45:22
6#

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
洪蕴哲
金牌服务用户   /  发表于:2023-6-9 09:46:58
7#
Erik.Xue 发表于 2023-6-9 08:58
如果是sqlite内置库,可以用SELECT CAST("文本" as NUMERIC) as aaa FROM "表1"

转换文本为数字,在活字 ...


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部