SQL关联两个没有关系的表格,输出表格后追加一列相同的数

在计算百分比或者需要求不同时间差的时候,需要将一列不同的数和一个相同的数字计算, 比如不同产品占整体销售额的百分比等等。

如何将两个没有关系的表格合并起来:

  1. TABLE_A cross join TABLE_B
  2. TABLE_A join TABLE_B on 1

例一:求百分比

员工薪资表格如下:
在这里插入图片描述
问题:求每个人的名字、工资、所有人总工资和每个人占总工资的百分比

解法:使用corss join 将总工资和工资表格左右合并起来

SELECT 
	name
	,salary
	,total_salary
	,concat(round(salary*100/total_salary,2),'%') as percentage
FROM employeesalary
cross join (select sum(salary) as total_salary  from employeesalary) t1

在这里插入图片描述


例二:求时间差

原数据库表如下,在这里插入图片描述
问题: 需要输出每个用户id的最早、最晚登录时间以及库表内的最近日期。


解法: 每个用户的时间和整个表的日期可以分别求出, 然后使用 join on 1 将两个结果左右合并起来

#每个用户的时间
SELECT uid, MIN(DATE(in_time)) as first_dt,
                MAX(DATE(out_time)) as last_dt
            FROM tb_user_log
            GROUP BY uid

#最近时间
select max(Date(out_time) as current_dt

#将两者合并
SELECT *
        FROM (
            SELECT uid, MIN(DATE(in_time)) as first_dt,
                MAX(DATE(out_time)) as last_dt
            FROM tb_user_log
            GROUP BY uid
        ) as t_uid_first_last
        JOIN (
            SELECT MAX(DATE(out_time)) as cur_dt,
                COUNT(DISTINCT uid) as user_cnt
            FROM tb_user_log
        ) as t_overall_info ON 1

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值