Mysql 按条件计数筛选分组中的查询结果
我有以下模式 第一个查询显示我从表中收集的整个数据集合 我想做的是创建一个测试来检查产品在网站上的显示,但是我希望它是动态的,因为当我们运行测试时,产品可能不再可用 为此,我想找出哪个Mysql 按条件计数筛选分组中的查询结果,mysql,sql,select,group-by,having-clause,Mysql,Sql,Select,Group By,Having Clause,我有以下模式 第一个查询显示我从表中收集的整个数据集合 我想做的是创建一个测试来检查产品在网站上的显示,但是我希望它是动态的,因为当我们运行测试时,产品可能不再可用 为此,我想找出哪个parent\u id有超过3个child\u id,至少有一个child\u id,其中quaty>0,至少有一个子id,其中数量=0和wh\u-soh>0,并且至少有一个子id,其中数量和wh\u-soh=0 这3种情况表明子id可以处于3种状态 库存(数量>0) 缺货,但可以从仓库重新供应(数量=0和WHU
parent\u id
有超过3个child\u id
,至少有一个child\u id
,其中quaty
>0,至少有一个子id
,其中数量
=0和wh\u-soh
>0,并且至少有一个子id
,其中数量
和wh\u-soh
=0
这3种情况表明子id
可以处于3种状态
- 库存(
>0)数量
- 缺货,但可以从仓库重新供应(
=0和数量
>0)WHU soh
- 完全缺货(
和数量
=0)wh\u soh
因此,我如何在查询中进行条件计数,即计数(其中qty=0,wh\U soh=0)尝试此查询,您可以使用如下所示的总和(条件)对条件进行计数
SELECT p.parent_id,
COUNT(*) as children,
SUM(c.qty > 0) as in_stock,
SUM(c.qty = 0 AND c.wh_soh > 0) as warehouse,
SUM(c.qty = 0 AND c.wh_soh = 0) as out_of_stock
FROM test_parent p
INNER JOIN test_relation r USING (parent_id)
INNER JOIN test_child c USING (child_id)
GROUP BY p.parent_id
HAVING children > 3
AND in_stock > 0
AND warehouse > 0
AND out_of_stock > 0
试试这个:
SELECT a.parent_id, a.url
FROM (SELECT tr.parent_id, tp.url, tr.child_id,
(CASE WHEN tc.qty > 0 THEN 1 WHEN tc.qty = 0 AND tc.wh_soh > 0 THEN 2 WHEN tc.qty = 0 AND tc.wh_soh = 0 THEN 3 END) AS test
FROM test_relation AS tr
INNER JOIN test_parent AS tp ON tr.parent_id = tp.parent_id
INNER JOIN test_child AS tc ON tc.child_id = tr.child_id
) AS a
GROUP BY a.parent_id HAVING COUNT(DISTINCT child_id) >=3 AND COUNT(DISTINCT test) >= 3;
检查此链接
输出
| PARENT_ID | URL |
|-----------|-------|
| 5 | url_e |
| 11 | url_k |