各位大佬,初学者问一道考试题,这题怎么只用一条语句写?
sql吧
全部回复
仅看楼主
level 1
mzuzm89 楼主
已知以下表结构,请用一条SQL语句查询出:安装日期在2018-05-01(含)至2018-05-30(含)期间、且最后登录日期在2018-08-05(含)之后的用户总人数,及在满足前述条件的用户中,2018-08-05(含)之后有过付费的总人数、付费的总次数与付费的总金额。
输出结果包括:用户总人数、付费总人数、付费总次数、付费总金额
table_a(每个用户只有一条记录):uid,install_time(安装日期),last_login_time(最后登录日期)
table_b(日志表,每发生一笔付费产生一条记录):uid,pay_time,money
例如:查询结果是100,30,60,400
表示,满足安装条件的人数为100,其中有30人在2018-08-05之后有付费,共付费60次,总金额为400$
2019年05月25日 07点05分 1
level 1
老哥,我也遇到这道题了,请问你解决了吗,这是我的一个笔试题,很关键
2019年10月31日 16点10分 2
level 1
老哥在吗
2019年10月31日 16点10分 3
level 3
寫一半
select 用户总人数 = count(uid)
from table_a ta, table_b tb
where ta.uid = tb.uid
and ta.install_time >= '2018-05-01'
and ta.install_time <= '2018-05-30'
and ta.last_login_time >= '2018-08-05'
2019年11月01日 01点11分 4
level 1
这个就很简单了
2019年11月04日 13点11分 5
level 1
SELECT COUNT
( * ) as user_total,
count(e.sum) as user_pay,
sum(e.count) as pay_time,
sum(e.sum) as money
FROM
(
SELECT C
.uid,
C.install_time,
last_login_time,
COUNT ( C.pay_time ),
SUM ( C.money )
FROM
(
SELECT A
.uid AS uid,
b.pay_time AS pay_time,
b.money AS money,
A.install_time AS install_time,
A.last_login_time AS last_login_time
FROM
table_a
A LEFT JOIN table_b b ON b.uid = A.uid
) AS C
WHERE
C.install_time BETWEEN '2018-05-01'
AND '2018-05-30' and c.last_login_time >= '2018-08-05'
GROUP BY
C.uid,
C.install_time,
C.last_login_time
) e
2019年12月31日 06点12分 6

2019年12月31日 06点12分
1