試試這個:
SELECT category_id, MAX(post_id) AS post_id, COUNT(*) AS posts
FROM post
GROUP BY category_id
這假定你有一列post_id
是嚴格遞增的和獨特的。
如果你沒有這樣的字段,但你有例如post_date
這不是唯一的,你可能會在兩個帖子有完全相同的時間戳的罕見情況下得到兩行。
沒有帖子使用LEFT也得到類別JOIN:
SELECT
category.id AS category_id,
MAX(post.id) AS post_id,
COUNT(post.category_id) AS posts
FROM category
LEFT JOIN post
ON category.id = post.category_id
GROUP BY category.id
如果你需要從每個表中多個列,您可以加入以上與原表中的結果:
SELECT *
FROM
(
SELECT
category.id AS category_id,
MAX(post.id) AS post_id,
COUNT(post.category_id) AS posts
FROM category
LEFT JOIN post
ON category.id = post.category_id
GROUP BY category.id
) T1
JOIN category
ON T1.category_id = category.id
LEFT JOIN post
ON T1.post_id = post.id
感謝您的回答馬克,它工作得很好 - 只是一個小小的抱怨。這隻會返回至少有一個帖子的類別,是否可以修改它以返回沒有帖子的類別? 乾杯! – Sam
太棒了!針對我的需求做出快速調整,並且工作完美 - 非常感謝! – Sam
對於其他感興趣的人 - 我將第5行的'category.id'更改爲'category.id AS category_id',它現在可以正常工作 – Sam