[英]sql setting and using variables in select statements
假設您有以下sql:
SELECT
attempt.user_id,
attempt.team_id,
SUM(CASE
WHEN attempt.module_type_id IN (3 , 4, 5, 6) THEN attempt.score
END) / COUNT(CASE
WHEN attempt.module_type_id IN (3 , 4, 5, 6) THEN 1
END) as avg_score,
(SELECT
COUNT(atha.academy_module_id)
FROM
academy_team_has_academy_module atha
WHERE
atha.academy_team_id = attempt.team_id
) as num_modules
FROM
academy_attempt attempt
GROUP BY attempt.user_id
現在,您希望使用num_modules
來執行以下操作:
num_modules / COUNT(attempt.module_id) as completed
當我運行它時,我得到(按預期) Unknown column num_modules
那么有什么辦法可以將其設置為變量,以便可以使用該值?
您可以更改
(SELECT
COUNT(atha.academy_module_id)
FROM
academy_team_has_academy_module atha
WHERE
atha.academy_team_id = attempt.team_id
) as num_modules
至
@num_modules:=(SELECT
COUNT(atha.academy_module_id)
FROM
academy_team_has_academy_module atha
WHERE
atha.academy_team_id = attempt.team_id
) as num_modules
然后您可以使用@num_modules
后綴作為變量。
就像@num_modules / COUNT(attempt.module_id) as completed
我認為做到這一點的方法是做這樣的子查詢:
SELECT
tbl.user_id,
tbl.team_id,
tbl.num_modules / tbl.countModule_id as completed,
tbl.avg_score,
tbl.num_modules
FROM
(
SELECT
attempt.user_id,
attempt.team_id,
SUM(CASE
WHEN attempt.module_type_id IN (3 , 4, 5, 6) THEN attempt.score
END) / COUNT(CASE
WHEN attempt.module_type_id IN (3 , 4, 5, 6) THEN 1
END) as avg_score,
(SELECT
COUNT(atha.academy_module_id)
FROM
academy_team_has_academy_module atha
WHERE
atha.academy_team_id = attempt.team_id
) as num_modules,
COUNT(attempt.module_id) as countModule_id
FROM
academy_attempt attempt
GROUP BY attempt.user_id
) as tbl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.