Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按条件计数筛选分组中的查询结果_Mysql_Sql_Select_Group By_Having Clause - Fatal编程技术网

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和
    WHU soh
    >0)
  • 完全缺货(
    数量
    wh\u soh
    =0)
我可以过滤结果,这样我就可以得到所有具有3个或更多子id的父id(第二次查询),下一步是做一些类似于计数的事情(其中qty=0,wh\U soh=0),但是当我在谷歌上搜索时,我会不断地找到计算组中唯一值的结果


因此,我如何在查询中进行条件计数,即计数(其中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 |