GROUP BY和ORDER BY问题

时间:2014-12-06 02:26:31

标签: mysql sql

我有以下查询:

SELECT DISTINCT (
s.styleTitle
), COUNT(p.id) AS `PictureCount`
FROM  `style` s
LEFT JOIN  `instagram_picture_style` ps ON s.id = ps.style_id
LEFT JOIN  `instagram_shop_picture` p ON ps.picture_id = p.id
LEFT JOIN  `instagram_picture_category` c ON c.picture_id = p.id
LEFT JOIN  `instagram_second_level_category` sl ON c.second_level_category_id = sl.id
WHERE sl.id =25
GROUP BY p.id
ORDER BY PictureCount

然而这个查询给了我:

enter image description here

我基本上希望列表按其中包含最多图片的样式排序。我做错了什么?为什么它给我一个所有的风格,我很确定它有更多的风格图片

1 个答案:

答案 0 :(得分:3)

ORDER BY没有下划线。但同样重要的是,您正在使用DISTINCT,而您似乎认为它是一种功能。它不是。它是SELECT上的修改,适用于所有列。

您应该group by在不同的列中使用相同的列。像这样:

SELECT s.styleTitle, COUNT(p.id) AS `PictureCount`
FROM  `style` s
LEFT JOIN  `instagram_picture_style` ps ON s.id = ps.style_id
LEFT JOIN  `instagram_shop_picture` p ON ps.picture_id = p.id
LEFT JOIN  `instagram_picture_category` c ON c.picture_id = p.id
LEFT JOIN  `instagram_second_level_category` sl ON c.second_level_category_id = sl.id
WHERE sl.id  = 25
GROUP BY s.styleTitle
ORDER BY PictureCount DESC;

事实上,您distinct几乎不需要group by。如果您正在使用,您需要考虑为什么有必要。