专栏首页hotqin888的专栏gorm聚合查询group结合join和count

gorm聚合查询group结合join和count

场景:engineercms的文章article放在了成果product下面,成果有作者user,以及所属的目录project

现在想知道,某个project下的各位作者文章数量。

推荐廖雪峰的sql教程,最大的特点是可以在网页上试验sql语言,其次是讲得非常实用。看完再结合gorm的文档。

思路就是通过article表来分别join成果product表、user表和project表,然后group里用productid来筛选,最后再用projectid筛选。

//项目目录
type Project struct {
	Id              int64     `form:"-"`
	Code            string    `orm:"null"`                                              //编号
	Title           string    `form:"title;text;title:",valid:"MinSize(1);MaxSize(20)"` //orm:"unique",
}

//目录里的成果表
type Product struct {
	Id           int64
	Code         string `orm:"null"`                                              //编号
	Title        string `form:"title;text;title:",valid:"MinSize(1);MaxSize(20)"` 
	Label        string `orm:"null"`                                            //标签
	Uid          int64  `orm:"null"`
	Principal    string `orm:"null"`       //提供人                                            
	ProjectId    int64  `orm:"null"`       //目录projectid
	TopProjectId int64  `orm:"default(0)"` //项目id
}

//用户表
type User struct {
	Id            int64
	Username      string `json:"name",orm:"unique"` //这个拼音的简写
	Nickname      string //中文名 
}

//文章表,文章放在成果下面,所以文章没有直接对应作者,而是通过product成果来查作者
type Article struct {
	Id        int64     `json:"id",form:"-"`
	Subtext   string    `orm:"sie(20)"`
	Content   string    `json:"html",orm:"sie(5000)"`
	ProductId int64     `orm:"null"`//成果下面的文章
	Views     int64     `orm:"default(0)"`
	Created   time.Time `orm:"auto_now_add;type(datetime)"`
	Updated   time.Time `orm:"auto_now_add;type(datetime)"`
}

//查询返回新建的结构体-取出用户文章数目
type Result struct {
	Usernickname string `json:"name"`
	Productid    int64
	Total        int64 `json:"value"`
}

func GetWxUserArticles(pid int64) (results []*Result, err error) {
	db := GetDB()
	db.Order("total desc").Table("article").Select("product_id as productid, count(*) as total,user.nickname as usernickname").
		Joins("left JOIN product on product.id = article.product_id").
		Joins("left JOIN user on user.id = product.uid").Group("product.uid").
		Joins("left JOIN project on project.id = product.project_id").Where("project.id=?", pid).
		Scan(&results)
	return results, err
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL必知必会总结2-第8到13章

    本文是《SQL必知必会》一书的精华总结,帮助读者快速入门SQL或者MySQL,主要内容包含:

    皮大大
  • sql必知必会2

    将之前学习的数据库知识在整理下,主要是看的**《SQL必知必会》**。这本书不愧是经典,入门数据库真的完全足够啦!

    皮大大
  • PHP+MySQL专家编程——MySQL联接

    我们通常会在SELECT语句中使用联接,MySQL查询的联接使我们能够利用一个SQL语句查询或操作多个表的数据。

    Hi胡瀚
  • SQL 的执行顺序

    了解 SQL 的执行顺序非常有价值,它可以让我们写出语法正确的 SQL,帮助我们简化编写新查询的过程。

    白日梦想家
  • SQL 查询语句先执行 SELECT?兄弟你认真的么?

    好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?!

    陈哈哈
  • 面试必备技能-HiveSQL优化

    Hive SQL基本上适用大数据领域离线数据处理的大部分场景。Hive SQL的优化也是我们必须掌握的技能,而且,面试一定会问。那么,我希望面试者能答出其中的8...

    王知无-import_bigdata
  • 灵魂拷问,SQL 查询语句先执行 SELECT吗?

    其实,sql引擎在执行上述每一步时,都会在内存中形成一张虚拟表,然后对虚拟表进行后续操作,并释放没用的虚拟表的内存,以此类推。

    狼王编程
  • SQLServer 学习笔记之超详细基础SQL语句 Part 3

    -----------------------接Part 2-------------------

    授客
  • 数据库能力测试:SQL 语句改错

    数据库资源请在这里下载:https://download.csdn.net/download/weixin_43941364/12475108

    wsuo
  • Hive 常见的数据倾斜及调优技巧

    Hive在执行MapReduce任务时经常会碰到数据倾斜的问题,表现为一个或者几个reduce节点运行很慢,延长了整个任务完成的时间,这是由于某些key的条数比...

    大数据技术架构
  • SQL Server 性能优化之——T-SQL 临时表、表变量、UNION

    这次看一下临时表,表变量和Union命令方面是否可以被优化呢? 一、临时表和表变量 很多数据库开发者使用临时表和表变量将代码分解成小块代码来简化复杂的逻辑。但是...

    数据分析
  • 数据分析工具篇——HQL原理及优化

    HQL是数据分析过程中的必备技能,随着数据量增加,这一技能越来越重要,熟练应用的同时会带来效率的问题,动辄十几亿的数据量如果处理不完善的话有可能导致一个作业运行...

    数据森麟
  • ClickHouse SQL 的十项优化规则

    众所周知,ClickHouse 的 SQL 优化规则是基于RBO(Rule Based Optimization)的,那么你知道都有哪些优化规则吗 ?

    Nauu
  • 数据倾斜的原因是什么,如何解决

    key 分布不均匀 业务数据本身的欠缺性 建表设计方法不对 有些 SQL 难免会有一下数据倾斜不可避免 表现的形式: 任务完成进度卡死在99%,或者进度完成度在...

    美食江湖
  • TiDB 源码阅读系列文章(二十一)基于规则的优化 II

    在 TiDB 源码阅读系列文章(七)基于规则的优化 一文中,我们介绍了几种 TiDB 中的逻辑优化规则,包括列剪裁,最大最小消除,投影消除,谓词下推和构建节点属...

    PingCAP
  • SQL基础(2)

    之前的SQL基础1中已经介绍了部分Select的内容,但是,实际使用中select 还有很多其他的用法,本文会再介绍部分select的其他用法。

    July
  • SQL Server T-SQL高级查询

    高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student;   --all 查询所有...

    Java中文社群-磊哥
  • Hive快速入门系列(15) | Hive性能调优 [二] 表的优化

      将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率;再进一步,可以使用map join让小的维度表(1000条以下...

    不温卜火
  • 大数据干货系列(五)-Hive总结

    Hive总结 一、本质 Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查 询、统计和分析。 二、四大特点** • Hive本身不存...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券