mysql skip count_MySQL有子句和Count()

我有下表,我正在尝试检索每一个:

名称,descr,股票,地址,邮政编码&城市

item1的库存是> 10项目2的库存> 10,项目3的库存>五

所以我不希望只包含item1和item2的行,比如ID = 2的行

ID = 1的行也不适合,因为item1的库存是< 10

这意味着只有ID 3和ID 4的行匹配.但我不想看到6排,我只需要两排!包含名称,descr,股票,地址,邮政编码,城市

| ID | NAME | DESCR | STOCK | ADDRESS | POSTALCODE | CITY |

| 1 | foo | item1 | 5 | addr1 | po1 | city1 |

| 1 | foo | item2 | 10 | addr1 | po1 | city1 |

| 1 | foo | item3 | 5 | addr1 | po1 | city1 |

| 2 | bar | item1 | 40 | addr2 | po1 | city1 |

| 2 | bar | item2 | 30 | addr2 | po1 | city1 |

| 3 | smth | item1 | 25 | addr3 | po3 | city1 |

| 3 | smth | item2 | 20 | addr3 | po3 | city1 |

| 3 | smth | item3 | 10 | addr3 | po3 | city1 |

| 4 | els | item1 | 45 | addr4 | po4 | city1 |

| 4 | els | item2 | 30 | addr4 | po4 | city1 |

| 4 | els | item3 | 10 | addr4 | po4 | city1 |

我想我需要这样的东西:

SELECT name, descr, stock , address, postalcode, city

FROM table1

WHERE (descr like 'item1' AND stock >10)

OR (descr like 'item2' AND stock >10) OR (descr like 'item3' AND stock >5)

GROUP BY name, descr, stock , address, postalcode, city

HAVING COUNT(distinct(somethingIdidNotFigureOutYet)) > 2

我试图计算id,名称甚至描述,但这是不对的.请有人帮我解决这个问题.谢谢! (抱歉丑陋的表格格式)

解决方法:

我通常处理这样的问题的方法是将它们分成更小的组,然后根据需要组合查询.让我们考虑一些事情:

>项目1的库存,项目2必须大于10,项目3的库存必须大于5.

我们可以提取满足这些要求的行,如下所示:

SELECT id

FROM myTable

GROUP BY id

HAVING

SUM(CASE WHEN descr = 'item1' THEN stock else 0 END) > 10 AND

SUM(CASE WHEN descr = 'item2' THEN stock else 0 END) > 10 AND

SUM(CASE WHEN descr = 'item3' THEN stock else 0 END) > 5;

这将返回ID 3和4.巧​​合的是,这也将满足我们必须至少有一个item1,item2和item3的条件,因为我们在having子句中使用了’AND’,这是导致它排除的原因身份2.

标签:mysql,aggregate-functions,having-clause

来源: https://codeday.me/bug/20190829/1760929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值