MySQL select WHERE 语句中带有 COALESCE 或 IFNULL 的非 NULL 值
MySQL select non-NULL values with COALESCE or IFNULL in a WHERE statement
我正在 table 中构建一个摘要,我自己加入该摘要以计算某些值对应的行(在 TikiWiki CMS 中,跟踪器应用程序)。但是我有一个情况,其中有两个列可以具有相同的值,我需要 SQL 以特定顺序获取第一个非 NULL 值。
这是我工作的 table tiki_tracker_item_fields
的示例:
itemId | fieldId | value
==========================
41 | 236 | Paris
41 | 213 | Paris
14 | 236 |
14 | 213 | Paris
25 | 236 | Paris
25 | 213 |
在查询中,我想计算字段 ID 236 或字段 ID 213 中具有 "Paris" 作为值的所有行。这里的结果应该是:3.
有我的要求:
SELECT COUNT(*) AS sp_actions
FROM
`tiki_tracker_item_fields` AS actions
WHERE
COALESCE(
actions.fieldId = 236,
actions.fieldId = 213
)
AND actions.value = 'Paris'
因此,当我对字段 236 使用 'Paris' 时,此方法有效,但当我对字段 213 使用巴黎时,此方法无效。
而且我什至不确定我是否可以这样使用 COALESCE,我找到的所有示例都将 COALESCE 放在 SELECT 语句中。
然后是性能问题...
您可以将 count (distinct)
与 case
一起使用:
select
count(distinct case when value = 'Paris' then itemId end) cnt
from `tiki_tracker_item_fields`
where fieldId in (236,213);
我正在 table 中构建一个摘要,我自己加入该摘要以计算某些值对应的行(在 TikiWiki CMS 中,跟踪器应用程序)。但是我有一个情况,其中有两个列可以具有相同的值,我需要 SQL 以特定顺序获取第一个非 NULL 值。
这是我工作的 table tiki_tracker_item_fields
的示例:
itemId | fieldId | value
==========================
41 | 236 | Paris
41 | 213 | Paris
14 | 236 |
14 | 213 | Paris
25 | 236 | Paris
25 | 213 |
在查询中,我想计算字段 ID 236 或字段 ID 213 中具有 "Paris" 作为值的所有行。这里的结果应该是:3.
有我的要求:
SELECT COUNT(*) AS sp_actions
FROM
`tiki_tracker_item_fields` AS actions
WHERE
COALESCE(
actions.fieldId = 236,
actions.fieldId = 213
)
AND actions.value = 'Paris'
因此,当我对字段 236 使用 'Paris' 时,此方法有效,但当我对字段 213 使用巴黎时,此方法无效。
而且我什至不确定我是否可以这样使用 COALESCE,我找到的所有示例都将 COALESCE 放在 SELECT 语句中。
然后是性能问题...
您可以将 count (distinct)
与 case
一起使用:
select
count(distinct case when value = 'Paris' then itemId end) cnt
from `tiki_tracker_item_fields`
where fieldId in (236,213);