鱼C论坛

 找回密码
 立即注册
查看: 2141|回复: 4

SQL题

[复制链接]
发表于 2022-3-8 15:05:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
7、登录表playerlogin如下:
Vopenid        ddatetime         
小a           2017060506         
小a           2017060611         
小b           2017060606         
小b           2017060506         
小c           2017060606         
小c           2017060506         

金币流水表moneyflow如下:
Vopenid        ddatetime          money    AddOrReduce(充值即增加,消费即减少)
小a           2017060506         500         增加
小a           2017060608         1000        减少
小a           2017060612         1000        减少
小b           2017060606         100         减少
小d           2017060106         1050        减少


1)用sql写出6月6日,有过登录的人数,有过充值的人数,及充值金额(一条sql写出查询三个数值)
2)求出游戏中所有的玩家数


建表sql:
-- 登入表
create or replace temporary view playerlogin (Vopenid, ddatetime) as
values ("小a", "2017060506"),
       ("小a", "2017060611"),
       ("小b", "2017060606"),
       ("小b", "2017060506"),
       ("小c", "2017060606"),
       ("小c", "2017060506");

-- 金币流水表(充值即增加,消费即减少)
create or replace temporary view moneyflow (Vopenid,ddatetime,money,AddOrReduce) as
values ("小a","2017060506",500,"增加"),
       ("小a","2017060608",1000,"减少"),
       ("小a","2017060612",1000,"减少"),
       ("小b","2017060606",100,"减少"),
       ("小d","2017060106",1050,"减少");
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 15:54:05 | 显示全部楼层
用sql写出6月6日,有过登录的人数有过充值的人数,及充值金额(一条sql写出查询三个数值)

这三个条件同时满足吗??
select vopenid,addorreduce,money from moneyflow where ddatetime="20170606";

要是彼此独立的,我不认为用一条语句就能写出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 16:07:39 | 显示全部楼层
2)求出游戏中所有的玩家数


select vopenid from moneyflow UNION  select vopenid from playerlogin;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 16:14:21 | 显示全部楼层
本帖最后由 wp231957 于 2022-3-8 16:16 编辑

嗯,彼此独立,还真能用一条语句写出来
不知道是不是符合要求:
  1. select vopenid,money,addorreduce from moneyflow where ddatetime="20170606" UNION  select vopenid,0 ,0 from playerlogin where ddatetime="20170606";
复制代码



数据库.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:49:38 | 显示全部楼层
本帖最后由 512189654 于 2022-3-8 22:53 编辑

  1. -- 1)用sql写出6月6日,有过登录的人数,有过充值的人数,及充值金额(一条sql写出查询三个数值)
  2. with t1 as (
  3.     select Vopenid as id1, ddatetime
  4.     from playerlogin
  5.     where substr(ddatetime, 5, 4) = "0606"),
  6.      t2 as (
  7.          select Vopenid as id2, ddatetime, money, AddOrReduce
  8.          from moneyflow
  9.          where substr(ddatetime, 5, 4) = "0606"
  10.            and AddOrReduce = "增加")
  11. select "0606"              as ddatetime,
  12.        count(distinct id1) as `登入人数`,
  13.        count(distinct id2) as `充值人数`,
  14.        sum(money)          as total_money
  15. from t1
  16.          full outer join t2 on id1 = id2;

  17. -- 2)求出游戏中所有的玩家数
  18. select count(*)
  19. from (select Vopenid
  20.       from playerlogin
  21.       union
  22.       select Vopenid
  23.       from moneyflow);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表