关联两表查用户数

该查询代码用于统计两个表(表1和表2)中,在特定时间范围(去年一年,毫秒级时间戳1640966400000至1672502400000)内的唯一用户数。通过UNION操作合并两个查询结果并计算DISTINCTuser_id的数量。
摘要由CSDN通过智能技术生成

记录一段工作中用到的查询代码。

关联两个时间上继承关系的表查询用户数量,时间字段operate_time,用户字段user_id。

查询时间范围去年一年,时间以毫秒级时间戳形式在表中储存。

SELECT COUNT(DISTINCT user_id)
FROM
	(
		SELECT
			user_id
		FROM
			表2
		WHERE
			operate_time BETWEEN 1640966400000
		AND 1672502400000
		UNION
			SELECT
				user_id
			FROM
				表1
			WHERE
				operate_time BETWEEN 1640966400000
		AND 1672502400000
	) AS t;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Entgo 中进行多表关联查询可以使用 `Query` 方法和 `Join` 方法。`Query` 方法用于指定要查询的表,而 `Join` 方法用于指定要关联的表和关联条件。 例如,我们有三个表 `users`、`posts` 和 `comments`,它们的关系是:一个用户可以发表多篇文章,一篇文章可以有多个评论。我们想要查询某个用户发表的所有文章及每篇文章的评论数,可以使用以下代码: ```go import ( "context" "entgo.io/ent/dialect" "entgo.io/ent/dialect/sql" "entgo.io/ent/entc" "entgo.io/ent/entc/gen" "entgo.io/ent" "entgo.io/ent/entc/load" "entgo.io/ent/schema" ) // 定义用户、文章、评论实体 type User struct { ent.Schema } type Post struct { ent.Schema } type Comment struct { ent.Schema } // 生成实体代码 func main() { cfg := entc.LoadConfig("./ent/schema") cfg.Target = &gen.Config{ Header: "// Code generated by entc, DO NOT EDIT.", Templates: []*gen.Template{ gen.MustParse(gen.NewTemplate("hook/custom.tmpl")), }, } // 配置多表关联查询 cfg.Schema.Packages["schema"].Hooks = []gen.Hook{ entc.FuncHook((*sql.Selector)(nil), entc.HookConfig{ On: entc.OnQuery, Func: ` func (s *Selector) WithCommentsCount() *Selector { return s.Select( "posts.*", sql.As(sql.Count("comments.id"), "comments_count"), ). LeftJoin("posts_comments"). On(s.C("id"), ent.OpEq, sql.Ref("posts_comments", "post_id")). LeftJoin("comments"). On(sql.Ref("posts_comments", "comment_id"), ent.OpEq, sql.Ref("comments", "id")). GroupBy("posts.id") } `, }), } entc.Generate(context.Background(), &cfg) } // 查询某个用户发表的所有文章及每篇文章的评论数 func queryPostsAndCommentsCount(client *ent.Client, userID int) ([]*ent.Post, error) { user, err := client.User.Get(context.Background(), userID) if err != nil { return nil, err } posts, err := user.QueryPosts().WithCommentsCount().All(context.Background()) if err != nil { return nil, err } return posts, nil } ``` 在上面的例子中,我们定义了三个实体 `User`、`Post` 和 `Comment`,然后在 `main` 函数中配置了多表关联查询的 hook。在 hook 中,我们使用 `WithCommentsCount` 方法实现了查询某个用户发表的所有文章及每篇文章的评论数的逻辑。具体来说,我们先使用 `Select` 方法指定要查询的字段,其中 `posts.*` 表示查询 `posts` 表的所有字段,`sql.As(sql.Count("comments.id"), "comments_count")` 表示查询 `comments` 表中每篇文章的评论数,并将其重命名为 `comments_count`。然后我们使用 `LeftJoin` 方法指定要关联的表和关联条件,其中 `"posts_comments"` 是关联表的名称,`s.C("id")` 表示 `posts` 表的 `id` 字段,`sql.Ref("posts_comments", "post_id")` 表示 `posts_comments` 表的 `post_id` 字段。最后我们使用 `GroupBy` 方法对 `posts` 表按照 `id` 字段进行分组。 在查询时,我们先使用 `Get` 方法获取指定 `userID` 的用户实体,然后使用 `QueryPosts` 方法获取该用户发表的所有文章,最后使用 `WithCommentsCount` 方法进行多表关联查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值