我有以下查询:
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
然而这个查询给了我:
我基本上希望列表按其中包含最多图片的样式排序。我做错了什么?为什么它给我一个所有的风格,我很确定它有更多的风格图片
答案 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
。如果您正在使用,您需要考虑为什么有必要。