Mysql SQL-将一个查询除以另一个查询

Mysql SQL-将一个查询除以另一个查询,mysql,sql,Mysql,Sql,我正在尝试创建一个查询,返回训练完成百分比 训练完成百分比= ((日期列表中日期=和工作ID=1的日志条目之和)/ (WorkUtid=1时所有集合编号的总和) x100 下面是我目前拥有的,目前它只返回第一个查询的结果。 要使查询正确运行,我应该更改什么 SELECT ( ( SELECT COUNT(LogEntriesID) FROM LogEntriesTable LEFT JOIN ExerciseWorkoutJunctionTable

我正在尝试创建一个查询,返回训练完成百分比

训练完成百分比=

((日期列表中日期=和工作ID=1的日志条目之和)/

(WorkUtid=1时所有集合编号的总和) x100

下面是我目前拥有的,目前它只返回第一个查询的结果。 要使查询正确运行,我应该更改什么

SELECT
  (
    (
     SELECT COUNT(LogEntriesID) 
     FROM LogEntriesTable 
     LEFT JOIN ExerciseWorkoutJunctionTable 
        ON ExerciseWorkoutJunctionTable.ExerciseWorkoutJunctionID =
           LogEntriesTable.JunctionID
     WHERE LogEntriesTable.date IN (
       "14-05-2020", "15-05-2020", "16-05-2020", "17-05-2020", 
       "18-05-2020", "19-05-2020", "20-05-2020"
       )
       AND ExerciseWorkoutJunctionTable.WorkoutID = 1
    ) / (
     SELECT sum(SetNumber) 
     FROM ExerciseWorkoutGoalsTable
     LEFT JOIN ExerciseWorkoutJunctionTable
         ON ExerciseWorkoutJunctionTable.ExerciseWorkoutJunctionID =
            ExerciseWorkoutGoalsTable.JunctionID 
     WHERE ExerciseWorkoutJunctionTable.WorkoutID = 1
    )
  )

您的第一个SELECT语句正在执行外部联接,但随后有一个WHERE子句正在从ExerciseWorkoutJunctionTable表中选择非NULL值,因此我怀疑您可能正在执行内部联接

当您有两个查询时,请尝试:

SET @sum = (SELECT SUM(SetNumber) etc ....);
SELECT (COUNT(LogEntriesID) * 100 / @sum) AS percentage
FROM etc.

如果您使用的是MySQL>=8.0,那么您应该能够使用这样的窗口函数,将查询分解为更可读的部分

with entries as (
    SELECT COUNT(LogEntriesID) as log_entry_count
    FROM LogEntriesTable as l
    LEFT JOIN ExerciseWorkoutJunctionTable as e ON 
        e.ExerciseWorkoutJunctionID = l.JunctionID 
    WHERE l.date IN ("14-05-2020","15-05-2020","16-05-2020","17-05-2020","18-05-2020","19-05-2020","20-05-2020") 
        AND e.WorkoutID = 1
),
sets as (
    SELECT sum(SetNumber) as set_sum
    FROM ExerciseWorkoutGoalsTable as eg
    LEFT JOIN ExerciseWorkoutJunctionTable ej
        ON ej.ExerciseWorkoutJunctionID = eg.JunctionID 
    WHERE ej.WorkoutID = 1
)
select ((select log_entry_count from entries) / (select set_sum from sets)) * 100 as workout_completion_pct

请提供示例数据、所需结果以及所需逻辑的解释。如果使用表别名,代码的可读性会更高。例如,
从LogEntriesTable变为log
从LEFT JOIN ExerciseWorkoutJunctionTable变为ex
,这样您的连接看起来就像ex.ExerciseWorkoutJunctionID=log.JunctionId上的
,您可以使用变量。也就是说,将第一个查询放入一个变量,将第二个查询放入一个变量,然后将一个查询除以另一个查询。另请参见: