我得到一个错误的下面查询:如何在SELECT中使用COUNT别名?
SELECT
mt.tag_id,
count(mt.tag_id) as bcount,
bcount/t.count as rel,
t.count as t
FROM
tags.media_tag as mt,
tags.tags as t
WHERE
mt.media_id in (SELECT
mt.media_id
FROM
tags.media_tag as mt
WHERE
mt.tag_id = 'tag')
GROUP BY mt.tag_id
ORDER BY rel
LIMIT 1000;
错误:
Error Code: 1054. Unknown column 'bcount' in 'field list'
我想再次使用计数的选择,因为它是一个相当昂贵的查询。我只能做count(mt.tag_id)
,但这似乎是难以忍受的缓慢。任何想法来优化或实现别名的别名?
表:
medias
(示出于完整性考虑,不需要在查询)
+----+-------+-------+---------+
| id | attr1 | attr2 | attrEtc |
+----+-------+-------+---------+
| 11 | | | |
| 22 | | | |
+----+-------+-------+---------+
media_tag
+----------+--------+
| media_id | tag_id |
+----------+--------+
| 11 | tag |
+----------+--------+
tags
+-----+-------+
| id | count |
+-----+-------+
| tag | 1 |
+-----+-------+
UPDATE:示例数据:http://sqlfiddle.com/#!2/b8085
预期的响应,其中目标标签,或在查询上述mt.tag_id = tagB
:
+--------+--------+--------+-----------------+
| tag_id | tcount | bcount | bcount/tcount |
+--------+--------+--------+-----------------+
| tagB | 2 | 2 | 1 |
| tagC | 2 | 1 | 0.5 |
| tagA | 3 | 1 | 0.333 |
+--------+--------+--------+-----------------+
bcount = TAG_ID和TAGB(目标)之间共享media_id的数目
在给定的小提琴中,你的'mt.tag_id ='tag''是什么?来自您拥有的查询的价值?您的查询速度慢的原因之一是计算值上的“order by”子句,这使得查询在存在大量数据时真的很慢。 – 2015-02-24 08:31:31
在更新中回答了这个问题只是'tagB' – Zaheer 2015-02-24 08:45:37