MySQL查询计数投票

时间:2011-03-03 01:12:06

标签: mysql subquery inner-join

我有一个包含以下列的表:user_id,key,value和flag。 SELECT,FROM,WHERE,GROUP BY和ORDER BY按预期自行工作。当我尝试将密钥添加到表中时,我收到一个错误,表示要检查我的语法。关键是问题,价值就是答案。我想要一个结果,显示所有可能答案的所有问题以及答案发生频率的计数。

SELECT value AS 'Answer', count(*) AS 'Total Votes'
FROM survey_data sd
INNER JOIN (SELECT key FROM sd GROUP BY key) T1 ON T1.key = sd.key
WHERE flag != 1
GROUP BY value
ORDER BY 'Total Votes' DESC

我在这里缺少什么?

作为旁注,当我在没有INNER JOIN的情况下运行此查询时,结果不是按“总投票”排序DESC - 是否有人知道问题的原因或原因?

谢谢, 莱恩

2 个答案:

答案 0 :(得分:7)

键是保留字。

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

将其放入反引号(alt + 96)或重命名字段

修改。如果您使用包含多个单词的别名,则必须使用反引号。 因此,在

中更改您的订单条款

total votes desc排序,不带引号

在总票数之前和之后提出反击。我没有在帖子中看到它们,甚至用一个单词更好地改变你的字段别名。

答案 1 :(得分:0)

我是MSSQL的人,所以不确定这是否有帮助,但尝试使用完全合格的列,例如。 TABLE.COLUMN

SELECT sd.value AS 'Answer', count(sd.*) AS 'Total Votes'
FROM survey_data sd
INNER JOIN (SELECT sd.key FROM sd GROUP BY sd.key) T1 ON T1.key = sd.key
WHERE sd.flag != 1
GROUP BY sd.value
ORDER BY 'Total Votes' DESC