簡體   English   中英

SQL - 將一個查詢除以另一個

[英]SQL - Divide One Query by Another

我正在嘗試創建一個返回鍛煉完成百分比的查詢...

鍛煉完成百分比 =

((日志條目總和 WHERE 日期 = IN 日期列表和 WorkoutID =1)/

(所有設置數字的總和 WHERE WorkoutID = 1))x 100

以下是我目前擁有的,目前它只返回第一個查詢的結果。 我應該更改什么才能使查詢正確運行?

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 語句正在執行 OUTER JOIN,但隨后您有一個 WHERE 子句從ExerciseWorkoutJunctionTable 表中選擇非NULL 值,所以我懷疑您還不如執行INNER JOIN。

當您有兩個查詢時,請嘗試:

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

如果您使用的是 MySQL >= 8.0,您應該能夠使用像這樣的 window 函數,它將您的查詢分解為更具可讀性的部分。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM