Mysql组post_id按最大计数状态

d3b*_*g3r 3 mysql sql database

嗨,我有一个mysql查询,它将返回post_id最大状态计数,它当前显示的结果

POST_ID

    3
Run Code Online (Sandbox Code Playgroud)

Mysql表:

(`post_id`, `user_id`, `status`, `date_created`)
(2, 2, 'funny', 20121022120627)
(2, 3, 'lame', 20121023120627)
(3, 1, 'useful', 20121023120627)
(3, 3, 'lame', 20121023120627)
(3, 4, 'useful', 20121023120627)
(4, 4, 'useful', 20121024120627)
Run Code Online (Sandbox Code Playgroud)

但我需要的结果是,在desc order.if 2结果具有相同数字时显示从max到min的计数,那么最高结果将基于最新的date_created类似这样

POST_ID

     3
     2
     4
Run Code Online (Sandbox Code Playgroud)

我目前的疑问是

SELECT post_id
FROM tableName
GROUP BY post_ID
HAVING COUNT(*) = 
(
    SELECT MAX(x.counts)
    FROM
    (
        SELECT post_id, COUNT(*) counts
        FROM tableName
        GROUP BY post_id
    ) x
)
Run Code Online (Sandbox Code Playgroud)

该示例可以在SQLFiddle SQLFiddle找到

Mah*_*mal 5

但我需要的结果是,在desc order.if 2结果具有相同数字时显示从max到min的计数,那么最高结果将基于最新的date_created.

你需要ORDER BY COUNT(*) DESC, date_created DESC这样:

SELECT post_id
FROM tableName
GROUP BY post_ID
HAVING COUNT(*) = 
(
    SELECT MAX(x.counts)
    FROM
    (
        SELECT post_id, COUNT(*) counts
        FROM tableName
        GROUP BY post_id
    ) x
)
ORDER BY COUNT(*) DESC, date_created DESC
Run Code Online (Sandbox Code Playgroud)

更新1

试试这个,

SELECT post_id
FROM tableName
GROUP BY post_ID
ORDER BY  COUNT(*) DESC, MAX(`date_created`) DESC
Run Code Online (Sandbox Code Playgroud)

更新了SQL小提琴演示

  • @JohnWoo - 再次感谢.应该是你的答案. (2认同)