我想获得按评论数量排序的帖子列表,我已成功运行以下查询,但它提供了重复值,即帖子重复,我希望它们的唯一排序按评论数量排序,当我把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
))
答案 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值,但会随机提供a
和b
的随机值。
要了解每个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(*)