MySQL CASE WHEN麻木IS NULL忽略记录WHERE麻木IS NOT NULL

问题描述 投票:0回答:1

我在表格中有这些数据:

numb    m   value
8070    1   7.63
NULL    1   7.64
NULL    1   7.65
8070    2   7.939
8070    2   7.935
8070    2   7.941
NULL    3   7.62
8070    4   7.92
8070    4   7.935

我需要qazxsw poi和qazxsw poi为每个qazxsw poi,如果有MIN(value)没有MAX(value)(NULL),那么带有m的那些应该被忽略。

所以我应该得到以下结果:

value

我已经尝试了很多不同的东西,但似乎没有任何工作,我没有更多的想法如何找到相关的信息。你能指点我正确的方向吗?

更新:获取它看起来像这样的值的数量:

numb
mysql group-by max min
1个回答
1
投票

此查询应该为您提供所需的结果。它有两级嵌套派生表。首先:

numb

计算numb m value NULL 1 7.64 NULL 1 7.65 8070 2 7.935 8070 2 7.941 NULL 3 7.62 8070 4 7.92 8070 4 7.935 的每个值的最小值和最大值,取决于COALESCE( IF( COUNT( CASE WHEN m IN (2, 4) THEN value ELSE CASE WHEN m IN (1, 3) AND numb IS NULL THEN value END END ) = 0, NULL, COUNT( CASE WHEN m IN (2, 4) THEN value ELSE CASE WHEN m IN (1, 3) AND numb IS NULL THEN value END END ) ), COUNT( CASE WHEN m IN (1, 3) AND numb IS NOT NULL THEN value END ) ) AS cnt 是数字还是SELECT m, MIN(CASE WHEN numb IS NULL THEN value END) AS min_null, MAX(CASE WHEN numb IS NULL THEN value END) AS max_null, MIN(CASE WHEN numb IS NOT NULL THEN value END) AS min_normal, MAX(CASE WHEN numb IS NOT NULL THEN value END) AS max_normal FROM numbers GROUP BY m; 。在下一个级别,

m

我们使用计算适当的最小值和最大值来使用(如果有numb值,我们使用它,否则我们使用与NULL的数值相关联的值)。最后,我们SELECT m, COALESCE(min_null, min_normal) AS min_value, COALESCE(max_null, max_normal) AS max_value FROM (... query 1...) 数字表到查询2的结果,为NULL的每个值找到numb的适当值:

JOIN

输出:

numb

m

完整查询:

SELECT n.numb, n.m, n.value
FROM numbers n
JOIN (... query 2 ...) num ON num.m = n.m AND (num.min_value = n.value OR num.max_value = n.value)
ORDER BY n.m, n.value
© www.soinside.com 2019 - 2024. All rights reserved.