【问题标题】:MySQL query to count votesMySQL查询来计算选票
【发布时间】:2011-03-03 01:12:05
【问题描述】:

我有一个包含以下列的表: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 —— 有谁知道问题的原因或可能是什么?

谢谢, 瑞恩

【问题讨论】:

    标签: mysql subquery inner-join


    【解决方案1】:

    key 是保留字。

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

    将其放在反引号内 (alt+96) 或重命名您的字段

    编辑。如果你使用的别名有多个单词,你也必须使用反引号。 因此,在

    中更改您的 order by 子句

    total votes desc 订购,不带引号

    在总票数前后加上反引号。我没有在我的帖子中看到它们,甚至更好地用一个词来更改您的字段别名。

    【讨论】:

      【解决方案2】:

      我是一个 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 2021-04-07
        相关资源
        最近更新 更多