jfreechart柱状图java mysql_MySQL三两奇巧

5d3479d3f0c4e18d79d1219cc0574381.png

脚本之家

你与百万开发者在一起

5d3479d3f0c4e18d79d1219cc0574381.png

655f76b8054548eca974f9b9b75d8fdf.gif

527b86a2f6527de13f077e5ce265b6cb.png

作者 | 玉面玲珑颜如玉

出品 | 脚本之家(ID:jb51net)

如有好文章投稿,请点击 → 这里了解详情

MySQL作为国内中小企业最流行的关系型数据库,在业务中经常会被用到。如果要说有什么奇巧,真的不是一两篇文章能够概述的

在这里挑选了一些在实际开发中可能会经常用到的一些技巧,简单地来说说。

0 1列拼接问题

在实际项目中,经常需要将某一列的内容拼接并返回,特别是一些归集的报表导出的业务中。这里创建1张类似如下的数据表,并插入相关的数据:

create table user (

id int primary key auto_increment,

username varchar(20),

age int

);

insert into user (username,age) values ('张三',20),("李四",25),("王五",26),("李四",20);

现在我们想将user表中用户筛选出来进行拼接并返回。此时,我们可以借助MySQL的group_concat函数进行拼接,可以写出1条类似如下的语句:

mysql> select group_concat(username) user from user;

查询结果为:

user
张三,李四,王五,李四

该语句查询出每行的用户名称,之后将其进行拼接。然而,由于数据表中用户李四存在2条记录,因此导致最终结果出现了重复的记录。而实际开发需求中更多的是,要求对最终的结果进行去重,此时就用到了1个比较有意思的技巧。

我们稍作修改,在group_concat函数的筛选的列之前添加1个distinct关键字,此时可以得到:

mysql> select group_concat(distinct username) user from user;

结果如下所示:

user
张三,李四,王五

可以发现列值去重了,得到我们期望的结果。

0 2绘制简单直方图

一般业务中,常常会遇到的1个需求就是对用户进行分组,比如查询某个用户最近几个月的消费情况。这里进行简化处理,假设只查询user表中用户出现的次数,此时可以借助group by语句来操作:

select username,count(id) num from user group by username order by num desc user

其结果类似如下:

usernamenum
李四2
张三1
王五1

其中用户李四出现了2次,而其他的用户只出现了1次。有些时候,为了能方便的查看出差别,一般会采用图形化的方式进行处理。此时,可以借助MySQL中repeat函数对某个字符串重复多次的方式,进行简单的ASCII图形化展示。

此时可以写出1个类似如下的SQL语句:

mysql> select b.username,repeat("*",b.num) star from (select username,count(id) num from user group by username order by num desc) b

结果如下所示:

usernamestar
李四**
张三*
王五*

这里涉及到1个子查询的知识点,就不展开说明了。简单的说,我们可以让我们的数据来自另1个select子语句,但是需要给该子语句1个别名,否则MySQL会抛出异常。

我们将得到的统计次数传递给repeat函数,从而让其根据结果进行渲染,从而得到1个简单的柱状图。如果数据量更多的话,效果会更加明显。

0 3简化表关联

在关系型数据库中,常常会通过2个及多个表之间的关联来完成复杂的业务需求。对于之前的逻辑,我们新增1个类似如下的关联表:

create table information (

id integer,

post varchar(20)

);

insert into information (id,post) values (1,'大学教授'),(2,"IT架构师"),(3,"CEO"),(4,"操盘手");

通过用户的id进行2个表之间数据的关联。现在,我们想查询每个用户的信息,包括其名字、年龄及职位。于是有如下的SQL语句:

mysql> select a.id,a.username,a.age,b.post from user a join information b on a.id = b.id

此时可以得到如下的结果:

idusernameagepost
1张三20大学教授
2李四25IT架构师
3王五26CEO
4李四20操盘手

4 rows in set

在MySQL中在关联查询时如果2个表中的关联字段是相同的话,可以通过using子句进行简化,我们可以将上述的SQL修改为:

mysql> select a.id,a.username,a.age,b.post from user a join information b using (id);

其结果为:

idusernameagepost
1张三20大学教授
2李四25IT架构师
3王五26CEO
4李四20操盘手

通过using子句我们简化了SQL中 on a.id=b.id这段的语句。

当然,实际开发中还有其他一些技巧,有时间再分享。

本文作者:本人笔名玉面玲珑颜如玉,1个多年滚打于Web开发的研发工程师。熟悉PHP、Java、C++等编程语言,以编程作为乐趣。

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

写的不错?赞赏一下

66e8aa332b0f0b77075dc1aa6735eb23.png

长按扫码赞赏我

84f84d970ee52dc4513dfb037625623d.png

6cb028a7d03d243883604f96d555ff9e.gif

● 1b188643c7d3798ed2d905ffb125e006.gif 黑客是怎么知道你的密码的

● 1b188643c7d3798ed2d905ffb125e006.gif 脚本之家粉丝福利,请查看!

● 1b188643c7d3798ed2d905ffb125e006.gif 地球程序员之神:没上过大学,曾拒盖茨的Offer,4代码农靠他吃饭

● 入行AI,程序员为什么要学习NLP?

●  五款主流Linux发行版性能对比,不求最强但求稳

0f528c6f461ed5a01856b3cbba64c80c.gif

小贴士

返回 上一级 搜索“Java 女程序员 大数据 留言送书 运维 算法 Chrome 黑客 Python JavaScript 人工智能 女朋友 MySQL 书籍 等关键词获取相关文章推荐。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值