簡體   English   中英

MySql中的if條件時如何應用案例

[英]How to apply case when with if condition in MySql

我在下面提到了兩個表:

表格1

ID       Key
TTT-1    atre-0-1
TTT-2    atrt-4-2
TTT-3    attr-1-3
TTT-4    aert-2-5

表2

Key          Red1       Red2
atre-0-1     10         25
atre-0-1     15         07
atre-0-1     16         19
atrt-4-2     11         21
atrt-4-2     07         22
attr-1-3     -4         3
attr-1-3     33         11
attr-1-3     50         45
aert-2-5     -5         2
aert-2-5     -4         1

通過利用上述絲束表,我想獲取的最小值Red1Red2通過組ID與下面提到的條件。

  • 對於任何ID如果任何Red1Red2值為5不是考慮其是最多為五個其他值,如果存在,可為僅一個條目之間-5至ID針對其值范圍之間-5〜5不是僅考慮-最低標准為5到5。

要求的輸出:

ID        Number
TTT-1     07
TTT-2     07
TTT-3     11
TTT-4     -5

我已經寫了下面提到的查詢,但是不能正常工作。

select t1.ID,
case when min(t2.Red1)<min(t2.Red2) then min(t2.Red1) else min(t2.Red2) End as `Number`
from Table1 t1
left join Table2 t2 on t1.key=t2.key
group by t1.ID;

以下查詢應解決此問題:

SELECT t1.ID,
CASE WHEN min(t2.Red1)<min(t2.Red2) THEN t2.min_red1 ELSE t2.min_red2 END AS 
`Number`
FROM Table1 t1
LEFT JOIN 
(
SELECT 
    key,
    Red1
    Red2
    min(Red1) AS min_red1,
    min(Red2) AS min_red2
FROM Table2 ) AS t2
ON t1.key=t2.key
GROUP BY t1.ID;

您可以使用下面的SQL,這是您期望的示例。

查詢:

SELECT 
    a.ID,
    CASE
        WHEN
            LEAST(MIN(b.red1), MIN(b.red2)) BETWEEN - 5 AND 5
        THEN
            IFNULL(LEAST(MIN(CASE
                                WHEN red1 NOT BETWEEN - 5 AND 5 THEN red1
                            END),
                            MIN(CASE
                                WHEN red2 NOT BETWEEN - 5 AND 5 THEN red2
                            END)),
                    LEAST(MIN(b.red1), MIN(b.red2)))
        ELSE LEAST(MIN(b.red1), MIN(b.red2))
    END AS `Number`
FROM
    table1 a
        JOIN
    table2 b ON a.key = b.key
GROUP BY a.ID;

例:

mysql> create table table1(ID varchar(20),`key` varchar(20));
Query OK, 0 rows affected (0.23 sec)

mysql> insert into table1 values 
    -> ('TTT-1','atre-0-1'),
    -> ('TTT-2','atrt-4-2'),
    -> ('TTT-3','attr-1-3'),
    -> ('TTT-4','aert-2-5');
Query OK, 4 rows affected (0.27 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> 
mysql> create table table2(`key` varchar(20),red1 int(5),red2 int(5));
Query OK, 0 rows affected (0.30 sec)

mysql> insert into table2 values
    -> ('atre-0-1',10,25),
    -> ('atre-0-1',15,07),
    -> ('atre-0-1',16,19),
    -> ('atrt-4-2',11,21),
    -> ('atrt-4-2',07,22),
    -> ('attr-1-3',-4,3),
    -> ('attr-1-3',33,11),
    -> ('attr-1-3',50,45),
    -> ('aert-2-5',-5,2),
    -> ('aert-2-5',-4,1);
Query OK, 10 rows affected (0.29 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from table1;
+-------+----------+
| ID    | key      |
+-------+----------+
| TTT-1 | atre-0-1 |
| TTT-2 | atrt-4-2 |
| TTT-3 | attr-1-3 |
| TTT-4 | aert-2-5 |
+-------+----------+
4 rows in set (0.20 sec)

mysql> select * from table2;
+----------+------+------+
| key      | red1 | red2 |
+----------+------+------+
| atre-0-1 |   10 |   25 |
| atre-0-1 |   15 |    7 |
| atre-0-1 |   16 |   19 |
| atrt-4-2 |   11 |   21 |
| atrt-4-2 |    7 |   22 |
| attr-1-3 |   -4 |    3 |
| attr-1-3 |   33 |   11 |
| attr-1-3 |   50 |   45 |
| aert-2-5 |   -5 |    2 |
| aert-2-5 |   -4 |    1 |
+----------+------+------+
10 rows in set (0.21 sec)

mysql> 
mysql> SELECT 
    ->     a.ID,
    ->     CASE
    ->         WHEN
    ->             LEAST(MIN(b.red1), MIN(b.red2)) BETWEEN - 5 AND 5
    ->         THEN
    ->             IFNULL(LEAST(MIN(CASE
    ->                                 WHEN red1 NOT BETWEEN - 5 AND 5 THEN red1
    ->                             END),
    ->                             MIN(CASE
    ->                                 WHEN red2 NOT BETWEEN - 5 AND 5 THEN red2
    ->                             END)),
    ->                     LEAST(MIN(b.red1), MIN(b.red2)))
    ->         ELSE LEAST(MIN(b.red1), MIN(b.red2))
    ->     END AS `Number`
    -> FROM
    ->     table1 a
    ->         JOIN
    ->     table2 b ON a.key = b.key
    -> GROUP BY a.ID;
+-------+--------+
| ID    | Number |
+-------+--------+
| TTT-1 |      7 |
| TTT-2 |      7 |
| TTT-3 |     11 |
| TTT-4 |     -5 |
+-------+--------+
4 rows in set (0.28 sec)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM