sql - 三个条件以防万一
问题描述
我在 CASE WHEN 中有 2 个条件,但结果不是我想要的
这是我的代码:
SELECT CASE WHEN count(b.id_canteen) < 2 and status = 'Active' THEN 'Available'
ELSE 'Full' END as quota,
a.id_canteen,
name_canteen,
count(b.id_counter) as total
from canteen_A a
join canteen_B b on a.id_canteen=b.id_canteen
group by a.id_canteen,
name_canteen,
status;
这就是结果
=================================================
| quota | id_canteen | name_canteen | total |
=================================================
| Available | Canteen01 | Canteen A | 1 |
| Available | Canteen02 | Canteen B | 1 |
| Full | Canteen01 | Canteen A | 1 |
=================================================
我想要这样的结果
=================================================
| quota | id_canteen | name_canteen | total |
=================================================
| Available | Canteen01 | Canteen A | 2 |
| Available | Canteen02 | Canteen B | 1 |
=================================================
这是现场状态
==============================
| Status | id_canteen |
==============================
| Not Active | Canteen01 |
| Active | Canteen01 |
| Active | Canteen02 |
==============================
更新:我想添加条件 count(status) active < 2 。我应该怎么办?
解决方案
问题是GROUP BY
. 你不想status
在里面。所以我认为:
select (case when count(b.id_canteen) < 2 and
sum(case when status = 'Active' then 1 else 0 end) > 0
then 'Available'
else 'Full'
end) as quota,
a.id_canteen, name_canteen,
count(b.id_counter) as total
from canteen_A a join
canteen_B b
on a.id_canteen = b.id_canteen
group by a.id_canteen, name_canteen
推荐阅读
- serverless - 比较 Apache Velocity 模板中的字符串 (AWS AppSync)
- android - 带有 Google 地图的 Android 版 Facebook Messenger
- javascript - 带有复选框的控件元素显示
- javascript - 检查登录状态,Google oAuth,没有呈现按钮
- python - Python 中基于 yield 的协程与带有 @asyncio.coroutine 和 @types.coroutine 装饰器的协程有何不同?
- ruby-on-rails - 在仅 Rails 6 API 的应用程序中从 JBuilder 视图呈现 ActiveStorage blob
- azure-cosmosdb - 您如何在 mongo API Cosmos DB 中进行更改提要监视现在更改提要处理已被禁用且 Azure 函数不存在
- wix - 更改由 WiX 设置的注册表项
- python - opencv-python 有没有好的备忘单?
- mysql - 如何根据与另一个表匹配的数据将表列设置为特定值