【问题标题】:MySQLSyntaxErrorException when using COUNT with DISTINCT将 COUNT 与 DISTINCT 一起使用时出现 MySQLSyntaxErrorException
【发布时间】:2016-08-21 20:14:26
【问题描述】:

下面的 sql 语句出现错误。我访问过的网站都提倡将这两个关键字一起使用的正确方法。我正在尝试从测试结果中获取独特特征的数量。名称是测试的 PK。

public int getTestCount(Database db, String name) throws SQLException {

    int count = 0;
    String sql = "SELECT COUNT (DISTINCT Trait) As Count FROM RESULTS WHERE name = ?";

    PreparedStatement ps = db.con.prepareStatement(sql);
    ps.setString(1, name);

    ResultSet rs = ps.executeQuery();

    if (rs.next()) {
        count = rs.getInt("Count");
    }
    return count;
}

错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 使用正确语法的 MariaDB 服务器版本 在“DISTINCT Trait”附近)作为 Count FROM RESULTS WHERE name = 'test3'' 在第 1 行

【问题讨论】:

  • 请说明您遇到的错误
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行的“DISTINCT Trait) As Count FROM RESULTS WHERE name = 'test3'' 附近使用的正确语法
  • 请将此错误添加到问题的内容中,而不是在评论中。

标签: java mysql jdbc


【解决方案1】:

去掉COUNT后面的空格

SELECT COUNT(DISTINCT Trait) As Count FROM RESULTS WHERE name = ?

这是一个活生生的例子:SQL Fiddle

【讨论】:

  • 太棒了!不敢相信我被这么简单的事情打败了。
【解决方案2】:
public int getTestCount(Database db, String name) throws SQLException {
    int count = 0;
    String sql = "SELECT COUNT(DISTINCT Trait) As T_Count FROM RESULTS WHERE name = ?";

    PreparedStatement ps = db.con.prepareStatement(sql);
    ps.setString(1, name);

    ResultSet rs = ps.executeQuery();

    if (rs.next()) {
        count = rs.getInt("T_Count");
    }
    return count;
}

计数已保留。因此,您可以定义任何有效变量并在使用rs.getInt(<< here >>); 调用时使用它 一个很好的链接供您参考:MySql Syntax

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2017-02-16
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2013-05-12
    • 2021-11-18
    相关资源
    最近更新 更多