【发布时间】:2012-08-29 20:55:37
【问题描述】:
我正在尝试计算一个特殊分数。 'total' 和 'correct'(或order)需要不同的查询才能获得,并且总需要在两个地方使用。这导致了使用别名的问题。在这种情况下,重复子查询的性能和可读性太高。我尝试了两种不同的方法来让它工作:
SELECT rankings.id as link, (
SELECT COUNT(*) as total FROM rankings
INNER JOIN ranking_data ON ranking_id = rankings.id AND `type` = 'pre_reference'
WHERE case_id = 15 AND rankings.id = link
) as total,
ROUND(((total - `order`) / total) * 100, 2) AS score FROM rankings
INNER JOIN ranking_data ON ranking_id = rankings.id AND opinion_id = 124 AND `type` = 'pre_reference'
WHERE case_id = 15 AND user_id != 3;
在这里,我尝试为子查询返回的“总”值创建一个别名,并将其用于计分计算。链接引用在子查询中有效,但总引用在第 6 行失败。
SELECT ROUND(((total - `order`) / total) * 100, 2) AS score FROM rankings
INNER JOIN ranking_data ON ranking_id = rankings.id AND opinion_id = 124 AND `type` = 'pre_reference'
INNER JOIN (
SELECT COUNT(*) as total FROM rankings
INNER JOIN ranking_data ON ranking_id = rankings.id AND `type` = 'pre_reference'
WHERE case_id = 15
) AS total_table ON total_table.id = rankings.id
WHERE case_id = 15 AND user_id != 3;
在这里,我尝试通过左连接派生表使总和可用于列列表区域进行评分。 MySQL 在第 7 行告诉我找不到 total_table.id。如果我尝试左连接,它会抛出一般语法错误。
您能否给我一个解决方案,并说明为什么其他尝试不起作用?
【问题讨论】:
-
请告诉我们您的表结构是什么,并附上sqlfiddle.com 上的一些示例数据以及您想要显示的内容
-
如果需要当然可以,但我认为您可能会误解这个问题。这是一个关于语法以及如何使用别名的问题 - WHERE 子句中显示的值只是示例值
-
不要使用连接,而是在连接中使用派生表,这将为您提供命令
标签: php mysql sql phpmyadmin mysqli