3

こんにちは私はステータスの最大カウントによってpost_idを返すmysqlクエリを持っています、それが現在表示する結果は

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の順序で最大から最小までのカウントを表示することです.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の順序で最大から最小までのカウントを表示することです。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フィドルデモ

于 2012-10-24T07:20:08.017 に答える