Mysql SQL-将一个查询除以另一个查询
我正在尝试创建一个查询,返回训练完成百分比 训练完成百分比= ((日期列表中日期=和工作ID=1的日志条目之和)/ (WorkUtid=1时所有集合编号的总和) x100 下面是我目前拥有的,目前它只返回第一个查询的结果。 要使查询正确运行,我应该更改什么Mysql SQL-将一个查询除以另一个查询,mysql,sql,Mysql,Sql,我正在尝试创建一个查询,返回训练完成百分比 训练完成百分比= ((日期列表中日期=和工作ID=1的日志条目之和)/ (WorkUtid=1时所有集合编号的总和) x100 下面是我目前拥有的,目前它只返回第一个查询的结果。 要使查询正确运行,我应该更改什么 SELECT ( ( SELECT COUNT(LogEntriesID) FROM LogEntriesTable LEFT JOIN ExerciseWorkoutJunctionTable
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上的,您可以使用变量。也就是说,将第一个查询放入一个变量,将第二个查询放入一个变量,然后将一个查询除以另一个查询。另请参见: