2016-08-18 81 views
0

我在下面的sql語句中出現錯誤。我訪問過的網站提倡將這兩個關鍵字一起使用的正確方法。我試圖從測試結果中獲得獨特特徵的數量。名字是測試的PK。當使用COUNT和DISTINCT時出現MySQLSyntaxErrorException

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: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DISTINCT Trait) As Count FROM RESULTS WHERE name = 'test3'' at line 1

+0

請註明錯誤你 – Roberto

+0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一個錯誤在你的SQL語法中;請檢查對應於您的MariaDB服務器版本的手冊,以找到在'DISTINCT Trait'附近使用的正確語法)作爲第1行中的名稱='test3'的Count FROM RESULTS WHERE – TraderJosh

+0

請將此錯誤添加到問題的內容中,而不是評論。 – Julian

回答

0

COUNT

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

這裏後刪除空間是一個活生生的例子:SQL Fiddle

+0

太棒了!不能相信我被這麼簡單的東西擊敗了。 – TraderJosh

0
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