在计算百分比或者需要求不同时间差的时候,需要将一列不同的数和一个相同的数字计算, 比如不同产品占整体销售额的百分比等等。
如何将两个没有关系的表格合并起来:
TABLE_A cross join TABLE_B
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