[英]Reference subquery column in outer main SQL
對於在線課程腳本
這是我寫的SQL:
SELECT l.`id` as parent_lesson_id, l.bigImageURL, l.name,
(SELECT `percent` as percent FROM courses.`lesson_sessions`
WHERE lesson_id = parent_lesson_id AND user_id = 52461 ORDER BY `percent` DESC LIMIT 1) as percent
FROM courses.lessons l
WHERE l.courseID = 1 AND percent > 30
ORDER by `order` ASC
我正在使用子查詢,因為我返回的是一行(百分比最高),而不是所有行。 如果我使用LEFT JOIN
,我不知道我將如何只返回該 parent_lesson_id 百分比最高的行
一節課可以有許多節課,每節課都有一個百分比
運行此查詢時,我收到以下錯誤消息:
#1054 - Unknown column 'percent' in 'where clause'
我試圖解決的問題:
如何返回所有課程行,其中百分比 > 30,僅從課程表中獲取與課程相關的最高百分比行(一個課程可以有多個課程,每個課程具有不同的課程完成百分比)。
基本上我想返回最高百分比 >30 的所有課程
如果您想在子查詢內部以外的其他地方使用最大百分比,請將子查詢從SELECT
子句移動到FROM
子句。 為了做到這一點,通過聚合獲得最大的課程。
SELECT
l.id as parent_lesson_id,
l.bigImageURL,
l.name,
p.max_percent as percent
FROM courses.lessons l
JOIN
(
SELECT lesson_id, max(percent) as max_percent
FROM courses.lesson_sessions
WHERE user_id = 52461
GROUP BY lesson_id
HAVING max(percent) > 30
) p ON p.lesson_id = l.id;
WHERE l.courseID = 1
ORDER by order ASC;
您試圖在WHERE
子句中使用派生列,這是不允許的:
WHERE .... AND percent > 30
percent
是派生列。
MySql 允許在HAVING
子句中使用派生列,因此更改為:
SELECT
l.id as parent_lesson_id, l.bigImageURL, l.name,
(
SELECT percent FROM courses.lesson_sessions
WHERE lesson_id = l.id AND user_id = 52461
ORDER BY percent DESC LIMIT 1
) percent
FROM courses.lessons l
WHERE l.courseID = 1
HAVING percent > 30
ORDER by l.`order` ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.