Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL两个表的百分比合计如何随时间变化_Mysql_Sql_Database_Sqlite - Fatal编程技术网

Mysql SQL两个表的百分比合计如何随时间变化

Mysql SQL两个表的百分比合计如何随时间变化,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,您好,我有一个关于SQL结构的问题。我已经弄明白了其中的一些,但我无法得到其余的 用户表 user OS_signup 1 Mobile 2 Windows 3 Mac 4 Mobile 5 Windows 地牢桌 user dungeon progress status OS_completed deaths 1 Dungeon 1 1 finished

您好,我有一个关于SQL结构的问题。我已经弄明白了其中的一些,但我无法得到其余的

用户表

user    OS_signup
1       Mobile
2       Windows
3       Mac
4       Mobile
5       Windows
地牢桌

    user  dungeon     progress  status      OS_completed  deaths
    1     Dungeon 1   1         finished    Windows       0
    1     Dungeon 1   2         incomplete  Windows       0
    2     Dungeon 2   1         finished    Windows       1
    3     Dungeon 2   1         finished    Mac           1
    3     Dungeon 1   2         finished    Mac           3
    3     Dungeon 3   3         incomplete  Mac           0
    4     Dungeon 1   1         finished    Mobile        1
    5     Dungeon 1   1         incomplete  Windows       5
当比较完成第一个地下城第一级进度的用户与拥有游戏帐号的用户的百分比时,哪个操作系统最受欢迎

我有这个疑问

SELECT OS_signup, count(*) AS count_total
FROM users
GROUP BY OS_signup
这个呢

SELECT OS_completed, count(*) AS count_completed
FROM dungeons
WHERE dungeon = "Dungeon 1" AND progress >=1 AND status = "finished"
GROUP BY OS_completed
我显然得到了两个表,但我想编写一个查询,输出一个组合表,这样我得到一个如下所示的表:

OS          percent-done
Mobile      0.5
Windows     0.5
Mac         1
SELECT OS_signup, count(*) AS count_total, COUNT(tmp.user_id) as count_completed, COUNT(tmp.user_id) / COUNT(*) as percent
FROM users
LEFT JOIN (
    SELECT user_id
    FROM dungeons
      WHERE dungeon = 'Dungeon 1' AND progress >= 1 AND status = 'finished'
    GROUP BY user_id
    ) tmp ON tmp.user_id = users.id
GROUP BY OS_signup
如何编写查询以实现上述表格


谢谢大家!

只需将这两个查询的结果合并在一起:

WITH total(OS, count_total) AS (
  SELECT OS_signup, count(*)
  FROM users
  GROUP BY OS_signup
),
completed(OS, count_completed) AS (
  SELECT OS_completed, count(*)
  FROM dungeons
  WHERE dungeon = 'Dungeon 1'
    AND progress >= 1
    AND status = 'finished'
  GROUP BY OS_completed
)
SELECT OS,
       count_total,
       count_completed,
       CAST(count_completed AS FLOAT) / count_total AS percent
FROM total
JOIN completed USING (OS)
ORDER BY ...;

(MySQL没有通用的表表达式;您必须使用视图或子查询。)

对于MySQL,它可能是这样的:

OS          percent-done
Mobile      0.5
Windows     0.5
Mac         1
SELECT OS_signup, count(*) AS count_total, COUNT(tmp.user_id) as count_completed, COUNT(tmp.user_id) / COUNT(*) as percent
FROM users
LEFT JOIN (
    SELECT user_id
    FROM dungeons
      WHERE dungeon = 'Dungeon 1' AND progress >= 1 AND status = 'finished'
    GROUP BY user_id
    ) tmp ON tmp.user_id = users.id
GROUP BY OS_signup

谢谢你的回答,经过几次修改后,效果很好