我开始试图根据查询结果计算一个表中的记录。我的表看起来像这样:
$ curl --silent --location -cookie "$COOKIE" --cookie-jar "$COOKIE" \
--data 'username=xxx' --data-urlencode "password@passwd" 'http://example.com'
首先,我创建了一个查询,以便在与状态(描述)相同的行中为我提供公司名称。我的初步查询是:
parent_id | site_id | description
-----------------------------------
A1 1 FL
A1 2 NJ
A1 A1 Company_A
结果是:
SELECT master.description, sites.description, sites.site_id
FROM sites sites
INNER JOIN sites master
ON sites.parent_id = master.site_id
到目前为止一切顺利。但是,我想要做的是计算每个 site_id 的 ORDERS 表中的订单数量,即使订单数量为0。
我根据查询结果难以理解如何根据 ORDERS 表进行计数?任何有关此加入的帮助将不胜感激。
更新:几乎就在那里!这是有效的:
Company_A FL 1
Company_A DE 2
我留下的唯一问题是,如果我添加日期范围,我会得到正确的结果,但是没有显示任何具有该期间零订单的网站。所以,如果我添加:
SELECT master.description, sites.description, count(order_id) orderCount
FROM sites sites
INNER JOIN sites master
ON sites.parent_id = master.site_id
LEFT JOIN orders o
ON sites.site_id = o.site_id
WHERE sites.site_type = 3
GROUP BY master.description, sites.description, sites.site_id
ORDER BY master.description
我得到了正确的结果,但仅适用于在此期间有订单的网站。我错过了什么?
答案 0 :(得分:1)
这应符合您的期望:
SELECT master.description, sites.description, sites.site_id,
ISNULL((SELECT COUNT(*) FROM Orders o where master.siteId = o.siteId),0) as ordersCount
FROM sites sites
INNER JOIN sites master
ON sites.parent_id = master.site_id
答案 1 :(得分:1)
您可以使用LEFT Join轻松解决此问题,然后计算订单ID。重要的是不计算行count(*)
因为即使没有订单也会返回值1
此外,订单表上的任何过滤都需要在JOIN内完成。
SELECT master.description, sites.description, sites.site_id
,count(order_id) order_count
FROM sites sites
INNER JOIN sites master
ON sites.parent_id = master.site_id
LEFT JOIN orders o
ON master.site_id = o.Site_id
and o.order_date > '2015-10'
WHERE
sites.site_type = 3
GROUP by
master.description, sites.description, sites.site_id
您没有描述您的订单表,因此我猜测加入条件