我有 3 张桌子:
shops, 主键cid,zbid
shop_items, 主键id
shop_inventory, 主键id
shops a与shop_items b以下a.cid=b.cid AND a.zbid=b.szbid
shops相关:与shop_inventory
shop_items b与shop_inventory c以下有关:b.cid=c.cid AND b.id=c.iid
现在,我想运行一个返回a.*(来自的所有列shops)的查询。那将是:
SELECT a.* FROM shops a WHERE a.cid=1 AND a.zbid!=0
请注意,该WHERE子句是必要的。
接下来,我要返回每个商店的商品数量:
SELECT
a.*,
COUNT(b.id) items
FROM shops a
LEFT JOIN shop_items b ON b.cid=a.cid AND b.szbid=a.zbid
WHERE a.cid=1
GROUP BY b.szbid,b.cid
如您所见,我添加了一个GROUP BY子句以使其起作用。
接下来,我想返回商店中每件商品的平均价格。这并不难:
SELECT
a.*,
COUNT(b.id) items,
AVG(COALESCE(b.price,0)) average_price
FROM shops a
LEFT JOIN shop_items b ON b.cid=a.cid AND b.szbid=a.zbid
WHERE a.cid=1
GROUP BY b.szbid,b.cid
我的下一个标准是它变得复杂的地方。我还想返回每个商店的唯一买家。这可以通过查询shop_inventory c、获取COUNT(DISTINCT c.zbid). 现在记住这些表是如何相关的;这只应针对与相应商店拥有c的商品相关的行进行。ba
我尝试执行以下操作:
SELECT
a.*,
COUNT(b.id) items,
AVG(COALESCE(b.price,0)) average_price,
COUNT(DISTINCT c.zbid)
FROM shops a
LEFT JOIN shop_items b ON b.cid=a.cid AND b.szbid=a.zbid
LEFT JOIN shop_inventory c ON c.cid=b.cid AND c.iid=b.id
WHERE a.cid=1
GROUP BY b.szbid,b.cid
然而,这并没有奏效,因为它弄乱了items价值。实现此结果的正确方法是什么?
我还希望能够返回每家商店的购买总数。这将通过查看shop_inventory c并累加c.quantity每家商店的价值来完成。我该如何添加呢?