3

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

POST_ID

    3

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)

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

POST_ID

     3
     2
     4

我目前的查询是

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
)

该示例可以在 SQLFiddle SQLFiddle上找到

4

1 回答 1

5

但我需要的结果是,在 desc order 上显示从 max 到 min 的计数。如果 2 个结果具有相同的数字,那么最高结果将基于最新的 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

更新 1

尝试这个,

SELECT post_id
FROM tableName
GROUP BY post_ID
ORDER BY  COUNT(*) DESC, MAX(`date_created`) DESC

更新的 SQL Fiddle 演示

于 2012-10-24T07:20:08.017 回答