我正在加入两张桌子来展示汽车品牌。结构如下:
SELECT DISTINCT
b.title
FROM
brands as b
INNER JOIN items as i
ON i.brand_id = b.id
WHERE i.status = 1
ORDER BY COUNT(i.brand_id) DESC;
以上只生成一条记录。如果我删除"ORDER BY COUNT(i.brand_id) DESC;"
,它会正确显示所有记录。
我想根据每个品牌类别下的车辆数量对结果进行排序。因此,例如,如果宝马类别列出的汽车数量最多,那么它应该是第一个。
答案 0 :(得分:0)
您可以在聚合查询中加入SELECT b.title
FROM brands b
INNER JOIN (SELECT brand_id, COUNT(*) AS cnt
FROM items
WHERE status = 1
GROUP BY brand_id) i ON i.brand_id = b.id
ORDER BY cnt DESC;
:
{{1}}
答案 1 :(得分:0)
SELECT b.title
FROM brands as b
INNER JOIN items as i
ON i.brand_id = b.id
WHERE i.status = 1
GROUP BY b.title
ORDER BY COUNT(i.brand_id) DESC;
这对你有用。
我会用
SELECT b.title, count(i.brand_id)
FROM items i
LEFT JOIN brands as b
ON b.id = i.brand_id
WHERE i.status = 1
GROUP BY i.brand_id
ORDER BY COUNT(i.brand_id) DESC;
您关注的是库存中的汽车数量。你想要根据每个品牌的数量来分解它们。因此,您主要关注项目表,只需要品牌表来获取存储在项目表(品牌名称)中的信息。最后,为了汇总每个品牌的数量,你必须让MySQL知道你想要的GROUP BY
。
我还没有使用过EXPLAIN,但我认为底层查询效率更高。