postgres多知识点综合案例
使用到的知识点:
1、使用with临时存储sql语句,格式【with as xxx(), as xxx2() 】以减少代码;
2、使用round()取小数点后几位;
3、使用to_char()将时间格式的数据转换为text型;
4、使用split_part(xx,xx2,xx3)函数对文本型数据进行切分;
5、使用group by之后利用count()进行统计;
6、join 以及 left join之间的区别;
7、使用join连接多个表,基本格式:【a join b on a.id = b.id join c on a.id = c.id】;
8、嵌套查询(select * from (select * from ));
9、case xx when a then b else c end xx2:判断xx,如果满足a,赋值为b,否则赋值为c,最后取别名xx2;
10、使用current_date获取年月日:2021-01-28,使用now()获取当前时间戳,使用select to_char(now(),'YYYY')获取年;
11、使用【||】进行字符串的拼接;
12、使用to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' )将CURRENT_DATE 拼接时间后转时间戳;
13、使用【时间戳 + '-1 day'】进行时间戳的天数减一;
14、使用:【字段::类型】可以将字段转换为指定类型,或者使用【cast(字段 as 类型)】;
15、使用【insert into 表名(字段名1,字段名2) select * from 表名2 】将查询出来的值批量添加到另一个表中;
with tmp as (
select * from (
select
d1.user_id,
d1.company_name,
d1.website_name,
d1.source_top,
round( 100 * d1.source_top / d2.news_num, 2 ) AS ratio,
row_number( ) OVER ( PARTITION BY d1.user_id, d1.company_name ) AS row_num
from
(SELECT
t1.user_id,
split_part ( t2.monitor_words_company, '#;#', 1 ) AS company_name,
website_name AS website_name,
count( website_name ) AS source_top
FROM
service.eoias_sentiment_analysis_result t1
JOIN service.eoias_crawler_key_param t2 ON t1.case_id = cast( t2.id AS text )
WHERE
t1.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND t1.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' )
GROUP BY
t1.user_id,
company_name,
website_name) d1
join
(SELECT
user_id,
company_name,
count( company_name ) AS news_num
FROM
(
SELECT
t1.user_id AS user_id,
t1.case_id AS case_id,
split_part ( t2.monitor_words_company, '#;#', 1 ) AS company_name,
website_name AS website_name,
CURRENT_DATE AS daily_date
FROM
service.eoias_sentiment_analysis_result t1
JOIN service.eoias_crawler_key_param t2 ON t1.case_id = cast( t2.id AS text )
WHERE
t1.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND t1.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) and t1.user_id = t2.user_id and t1.case_id = cast( t2.id AS text )
) c1
GROUP BY
c1.user_id,
company_name) d2
on d1.user_id = d2.user_id and d1.company_name = d2.company_name) e1 where row_num <=2
), tmp2 as (
SELECT
user_id,
company_name,
count( company_name ) AS news_num
FROM
(
SELECT
t1.user_id AS user_id,
t1.case_id AS case_id,
split_part ( t2.monitor_words_company, '#;#', 1 ) AS company_name,
website_name AS website_name,
CURRENT_DATE AS daily_date
FROM
service.eoias_sentiment_analysis_result t1
JOIN service.eoias_crawler_key_param t2 ON t1.case_id = cast( t2.id AS text )
WHERE
t1.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND t1.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) and t1.user_id = t2.user_id and t1.case_id = cast( t2.id AS text )
) c1
GROUP BY
c1.user_id,
company_name
), tmp3 as (
select user_id,company_name,sentiment_top1,sentiment_top1_num,sentiment_top1_ratio from (
SELECT
c1.user_id,
c1.company_name,
c1.text_sentiment as sentiment_top1,
c1.sentiment_top as sentiment_top1_num,
round(100 * c1.sentiment_top / c2.news_num, 2) as sentiment_top1_ratio,
row_number() over (partition by c1.user_id, c1.company_name) as rown
FROM
(
SELECT
t1.user_id,
split_part ( t2.monitor_words_company, '#;#', 1 ) AS company_name,
t1.text_sentiment,
count( 1 ) AS sentiment_top
FROM
service.eoias_sentiment_analysis_result t1
JOIN service.eoias_crawler_key_param t2 ON t1.case_id = cast( t2.id AS text )
WHERE
t1.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND t1.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' )
GROUP BY
t1.user_id,
company_name,
text_sentiment
) c1
JOIN (
SELECT
user_id,
company_name,
count( company_name ) AS news_num
FROM
(
SELECT
t1.user_id AS user_id,
t1.case_id AS case_id,
split_part ( t2.monitor_words_company, '#;#', 1 ) AS company_name,
website_name AS website_name,
CURRENT_DATE AS daily_date
FROM
service.eoias_sentiment_analysis_result t1
JOIN service.eoias_crawler_key_param t2 ON t1.case_id = cast( t2.id AS text )
WHERE
t1.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND t1.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' )
AND t1.user_id = t2.user_id
AND t1.case_id = cast( t2.id AS text )
) c1
GROUP BY
c1.user_id,
company_name
) c2 ON c1.user_id = c2.user_id
AND c1.company_name = c2.company_name) d1 where rown = '1'
) insert into daily.eoias_daily_abstract(user_id,case_id,daily_date,company_name,news_num,source_top1,source_top1_num,source_top1_ratio,source_top2,source_top2_num,source_top2_ratio,sentiment_top1,sentiment_top1_num,sentiment_top1_ratio)
select
c.user_id,
c.case_id,
to_char(now()::timestamp,'YYYYmmdd') as daily_date,
c.company_name,
tmp2.news_num,
tmp1.source_top1,
tmp1.source_top1_num,
tmp1.source_top1_ratio,
tmp1.source_top2,
tmp1.source_top2_num,
tmp1.source_top2_ratio,
tmp3.sentiment_top1,
tmp3.sentiment_top1_num,
tmp3.sentiment_top1_ratio
from (
SELECT
a.user_id,
a.case_id,
split_part ( b.monitor_words_company, '#;#', 1 ) AS company_name
FROM
service.eoias_sentiment_analysis_result a
JOIN service.eoias_crawler_key_param b ON a.case_id = cast( b.id AS text )
WHERE
a.release_time >= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss' ) + '-1 day'
AND a.release_time <= to_timestamp ( CURRENT_DATE || ' ' || '07:00:00', 'yyyy-MM-dd hh24:mi:ss')) c
join (select
a.user_id,
a.company_name,
a.website_name as source_top1,
a.source_top as source_top1_num,
a.ratio as source_top1_ratio,
case when b.website_name is null then '' else b.website_name end source_top2,
case when b.source_top is null then 0 else b.source_top end source_top2_num,
case when b.ratio is null then 0 else b.ratio end source_top2_ratio
from
(select user_id, company_name, website_name, ratio, source_top from tmp where row_num = 1) a
left join
(select user_id, company_name, website_name, ratio, source_top from tmp where row_num = 2) b
on a.company_name = b.company_name and a.user_id = b.user_id) tmp1 on c.user_id = tmp1.user_id and c.company_name = tmp1.company_name
join tmp2 on c.user_id = tmp2.user_id and c.company_name = tmp2.company_name
join tmp3 on c.user_id = tmp3.user_id and c.company_name = tmp3.company_name;
postgres多知识点综合案例的更多相关文章
- swiper快速切换插件(两个综合案例源码)
swiper快速切换插件 swiper.js自己去官网下载哈.先来一个tab切换案例: demo.html <!doctype html> <html> <head> ...
- 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现
075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...
- 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现
074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...
- 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现
073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...
- 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法
072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...
- 071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法
071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法 本文知识点:综合案例-数组移位-显示数组当中所有元素 ...
- 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据
070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...
- 069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求
069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求 本文知识点:综合案例-数组移位-案例需求 说明:因为时间紧张,本人写博客 ...
- 032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题
032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例--闰年问题 本文知识点:运算符和if-else条件语句的综合案例 ...
随机推荐
- YOLO实践初探
学习了Andrew Ng 深度学习第三周卷积神经网络课程后,接着看了看YOLO论文,论文看得懵懵懂懂,沉不下心精雕细琢,手痒痒,迫不及待地想试一试YOLO效果.于是乎,在github上下载了ping星 ...
- Mysql 中的MDL
本文可以结合 MySQL中的事务原理和锁机制 查看. 首先简单了解一下 mysql 的 sql 类型: 1.数据定义语言 DDL:Create.Drop.Alter 操作.用于定义库和表结构的. 2. ...
- 常见的JS手写函数汇总(代码注释、持续更新)
最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...
- [leetcode]61. Rotate List反转链表k个节点
类似于找链表的后k个节点 不同的是要把前边的接到后边 public ListNode rotateRight(ListNode head, int k) { //特殊情况 if (head==null ...
- python实现AES/DES/RSA/MD5/SM2/SM4/3DES加密算法模板汇总
都是作者累积的,且看其珍惜,大家可以尽量可以保存一下,如果转载请写好出处https://www.cnblogs.com/pythonywy 一.md5加密 1.简介 这是一种使用非常广泛的加密方式,不 ...
- Win10下mysql5.5和mysql8.0.19共存
Win10下mysql5.5和mysql8.0.19共存 需求:由于之前做的项目用的是mysql5.5,而新接的项目指定用mysql8,需要myql5..5和8同时存在运行. 前提:电脑已经安装mys ...
- 对CROS OPTIONS预检请求的一些思考
前后端分离模大势所趋,跨域问题更是老生常谈. 问题背景: 浏览器最基本的安全规范-同源策略.所谓同源是指域名.协议.端口相同.不同源的浏览器脚本(javascript.ActionScript.can ...
- spark:reducebykey与groupbykey的区别
从源码看: reduceBykey与groupbykey: 都调用函数combineByKeyWithClassTag[V]((v: V) => v, func, func, partition ...
- nacos统一配置中心源码解析
配置文件想必大家都很熟悉,无论什么架构 都离不开配置,虽然spring boot已经大大简化了配置,但如果服务很多 环境也好几个,管理配置起来还是很麻烦,并且每次改完配置都需要重启服务,nacos c ...
- 【模拟】P1143进制转换
题目相关 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入格式 共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A- ...