mysql DISTINCT()无法按预期工作

时间:2015-03-05 21:05:25

标签: mysql database

我想获得按评论数量排序的帖子列表,我已成功运行以下查询,但它提供了重复值,即帖子重复,我希望它们的唯一排序按评论数量排序,当我把DISTINCT()放在一起时我的整个查询,出现错误:  #1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'UNIQUE附近使用正确的语法(post.pname,post.pid FROM post,COMMENT WHERE post.pid = comment.pid ORD'在第1行

没有DISTINCT()的查询(工作但当然不提供唯一值)

SELECT post.pname, post.pid
FROM post, 
COMMENT WHERE post.pid = comment.pid
ORDER BY (

SELECT COUNT( * ) 
FROM COMMENT WHERE comment.pid = post.pid
GROUP BY post.pname
)

使用DISTINCT()查询(不起作用)

SELECT DISTINCT(post.pname, post.pid
FROM post, 
COMMENT WHERE post.pid = comment.pid
ORDER BY (

SELECT COUNT( * ) 
FROM COMMENT WHERE comment.pid = post.pid
GROUP BY post.pname
))

4 个答案:

答案 0 :(得分:1)

因此应该使用

DISTINCT

SELECT DISTINCT a,b,c FROM t;

没有GROUP BY。它将在表格中找到所有(a,b,c),然后对其进行重复数据删除。

这是破碎的:

SELECT id, a, b FROM t GROUP BY id;

这是因为它会找到所有不同的id值,但会随机提供ab的随机值。

要了解每个foo中有多少个,这种模式很有效:

SELECT foo, COUNT(*) FROM t GROUP BY foo;

DISTINCT之后不要使用()。

由于我不了解您的需求,我可能会或可能不会为您提供足够的信息来解决您的疑问。如果我失败了,请提供一些样本数据和所需的输出;有时逆向工程是解决问题的最简单方法。

答案 1 :(得分:0)

SELECT distinct(post.pname) FROM post,COMMENT WHERE post.pid = comment.pid ORDER BY (SELECT COUNT( * ) FROM COMMENT WHERE comment.pid = post.pid GROUP BY post.pname) DESC

答案 2 :(得分:0)

SELECT post.pname, post.pid
FROM post
    Inner Join ( Select 
                       comment.pid
                     , COUNT(*) As Cant
                 From COMMENT
                 Group By 
                       comment.pid
               ) As x
        On post.pid = x.pid
ORDER BY x.Cant

答案 3 :(得分:-2)

SELECT p.*
FROM post p JOIN comment c ON c.postId = p.id
GROUP BY p.id
ORDER BY COUNT(*)