[英]MySQL sum from alias unknown column
我想按DESC排序总共两列image_gallery
和video_gallery
。
SELECT
b.*,
c.title as category,
(SELECT count(*)
FROM `movie_gallery`
WHERE parent = b.id) as image_gallery,
(SELECT count(*)
FROM `movie_videos`
WHERE parent = b.id) as video_gallery,
(image_gallery + video_gallery) as sum_gallery'
FROM
`movies` b
LEFT JOIN
`category` c on c.id = b.category_id
ORDER BY
sum_gallery DESC
当我尝试将它们加在一起以获得sum_gallery
时,出现image_gallery
和video_gallery
未知列。
我该如何解决?
您不能在同一SELECT
语句中引用别名。 而不是使用相关的子查询,而将LEFT JOIN
与分组的子查询一起使用。
SELECT b.*, c.title AS category, image_gallery, video_gallery, IFNULL(image_gallery, 0) + IFNULL(video_gallery, 0) AS sum_galleries
FROM movies AS b
LEFT JOIN category AS c ON c.id = b.category_id
LEFT JOIN (
SELECT parent, COUNT(*) AS image_gallery
FROM movie_gallery
GROUP BY parent) AS d ON d.parent = b.id
LEFT JOIN (
SELECT parent, COUNT(*) AS video_gallery
FROM movie_videos
GROUP BY parent) AS e ON e.parent = b.id
ORDER BY sum_gallery DESC
由于别名仅在查询输出中可用,因此您不能在同一查询的其他部分使用别名。 为此,您将需要使用派生表概念,例如:
SELECT
myTable.*
(myTable.image_gallery + myTable.video_gallery) AS sum_gallery
FROM
(SELECT
b.*,
c.title AS category,
(SELECT count(*) FROM movie_gallery WHERE parent = b.id) AS image_gallery,
(SELECT count(*) FROM movie_videos WHERE parent = b.id) AS video_gallery
FROM
movies AS b
LEFT JOIN
category AS c ON c.id = b.category_id) AS myTable
ORDER BY
sum_gallery DESC
您无法访问这样的别名列,因为在评估查询时它们将不可用。 您将必须完全使用该表达式
SELECT
b.*,
c.title as category,
(SELECT count(*)
FROM `movie_gallery`
WHERE parent = b.id) as image_gallery,
(SELECT count(*)
FROM `movie_videos`
WHERE parent = b.id) as video_gallery,
((SELECT count(*)
FROM `movie_gallery`
WHERE parent = b.id) + (SELECT count(*)
FROM `movie_gallery`
WHERE parent = b.id)) as sum_gallery'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.