我有 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
的商品相关的行进行。b
a
我尝试执行以下操作:
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
每家商店的价值来完成。我该如何添加呢?