Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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我需要帮助计算百分比形式的datediff_Mysql_Sql_Database_Rdbms - Fatal编程技术网

Mysql SQL我需要帮助计算百分比形式的datediff

Mysql SQL我需要帮助计算百分比形式的datediff,mysql,sql,database,rdbms,Mysql,Sql,Database,Rdbms,我想计算一下百分比 因此[Room1A | 7 | 54%]我想使用窗口功能 My table room_name | datecount | percentage Room1A | 7 | Room2A | 3 | Room3A | 2 | Room5B | 1 | SELECT r.room_name,datediff(b.dateout,f.datei

我想计算一下百分比
因此[Room1A | 7 | 54%]

我想使用窗口功能

My table
room_name    |   datecount | percentage
Room1A       |   7         |
Room2A       |   3         |
Room3A       |   2         |
Room5B       |   1         |

SELECT r.room_name,datediff(b.dateout,f.datein) as datecount
FROM room r INNER JOIN form f ON r.room_name=f.room_name INNER JOIN bill b 
ON f.ID=b.Form_ID 
GROUP BY r.room_name

您可以使用交叉连接来获取总数

SELECT room_name, datecount,
       datecount * 100 / SUM(datecount) OVER(ORDER BY (SELECT 1)) [percentage]
FROM (Subquery) t;

我认为您想要的查询如下所示:

  SELECT  r.room_name, sum(datediff(b.dateout,f.datein)) as datecount
      , sum((datediff(b.dateout,f.datein))/tot)*100 as percentage
  FROM room r 
  CROSS JOIN  (
      select sum(datediff(b.dateout,f.datein)) as  tot
      from room
  ) t
  GROUP BY r.room_name

注意外部查询中的
SUM()
。您的版本返回每个房间的任意差异。我的最佳猜测是,您需要每个房间的日期之和。

我会使用类似的方法

SELECT r.room_name, SUM(datediff(b.dateout, f.datein)) as datecount,
       SUM(datediff(b.dateout, f.datein)) / fb.sumdiff
FROM room r INNER JOIN 
     form f
     ON r.room_name = f.room_name INNER JOIN
     bill b 
     ON f.ID = b.Form_ID CROSS JOIN
     (SELECT SUM(datediff(b.dateout, f.datein) as sumdiff
      FROM form f JOIN
           bill b
           ON f.ID = b.Form_ID
     ) fb
GROUP BY r.room_name, fb.sumdiff;
SELECT *, (datecount * 100 / (SELECT CAST(SUM(datecount) AS DECIMAL) FROM @Table)) 
AS perc
FROM @Table
GROUP BY room_name, datecount