gpt4 book ai didi

mysql - 如果只找到一条记录返回 Yes

转载 作者:行者123 更新时间:2023-12-01 00:51:49 28 4
gpt4 key购买 nike

我有一个具有这种结构的表:

table
id | site_id
-------------------
240 | 1
240 | 2
240 | 3
320 | 1
320 | 2
421 | 1
520 | 2
-------------------

30 万条记录

现在我正在尝试编写一个查询来为每条记录 (id) 返回是或否。

例如,如果 id 为 240 的记录有一个 site_id 1 则返回"is",如果它有 2、3 等等则返回“否”

我不确定如何处理它,但这是一个结果示例:

result_table
.-----------------------.
| id | result |
|-----------------------|
| 240 | No | -- has a site_id 1, 2 and 3
| 320 | No | -- has a site_id 1 and 2
| 421 | Yes | -- has a site_id 1 only
| 520 | No | -- has a site_id 2
'-----------------------'

这是我到目前为止的查询,但它似乎不正确

SELECT CASE WHEN count(id) > 1 THEN 'N' ELSE 'Y' END as Result 
FROM table sm
WHERE sm.site_id IN (1)
AND sm.site_id NOT IN (2,3,4,5,6,7,8,9)
AND id = 240

更新

所以这是我的完整查询,我添加了@gordon 的答案

SELECT 
m.merchant_name,
m.merchant_id,
ut.realname,
a.affiliate_name,
(select (case when count(site_id) = 1 then 'Yes' else 'No' end) as result
from site_merchant sm
WHERE sm.merchant_id = m.merchant_id
group by merchant_id) as isTjoos, -- y or no
(select (case when count(site_id) = 2 then 'Yes' else 'No' end) as result
from site_merchant sm
WHERE sm.merchant_id = m.merchant_id
group by merchant_id) as isUCOnly
-- isdlkonly -- y or no
FROM merchant m
LEFT JOIN merchant_editor_assignment mea ON mea.merchant_id = m.merchant_id
LEFT JOIN user_table ut ON ut.user_id = mea.user_id
LEFT JOIN affiliate a ON a.affiliate_id = m.affiliate_id_default

最佳答案

我将这个问题解释为您希望 id 只有一个 site_id 值。我以问题中的例子为例,site_id = 1。要做到这一点:

你想使用count(distinct):

select id, (case when count(distinct site_id) = 1 then 'Yes' else 'No' end) as result
from site_merchant sm
group by id

一个稍微更有效的版本是使用 min()max(),假设 site_id 永远不会为 NULL:

select id, (case when min(site_id) = max(site_id) then 'Yes' else 'No' end) as result
from site_merchant sm
group by id

这是因为 min 和 max 通常需要比 count(distinct) 少一点的处理。

如果您想检查 site_id 是否为“1”而不是其他任何内容,请将条件 and min(site_id) = 1 添加到 when 子句。

如果要检查 site_id 是否为 1 并且恰好有一行,那么您可以这样做:

select id, (case when count(site_id) = 1 and min(site_id) = 1 then 'Yes' else 'No' end) as result
from site_merchant sm
group by id

而且,如果你想检查是否只有一行:

select id, (case when count(site_id) = 1 then 'Yes' else 'No' end) as result
from site_merchant sm
group by id

关于mysql - 如果只找到一条记录返回 Yes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075465/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com