2013-01-01 15 views
5

Questo è il mio dati della tabella ....come utilizzare l'operatore di confronto in caso dichiarazione mysql

id days 
----------- 
1 10 
    20 
3 30 
4 25 
5 5 

voglio risultare come

id days resultcolumn 
1 10 less than 10 
2 20 less than 20 
3 30 less than 30 
4 25 less than 30 
5 5 less than 10 

ho usato interrogazione

SELECT id,days, 
    CASE days 
    WHEN days<=10 THEN 'less than 10' 
    WHEN days<=20 THEN 'less than 20' 
    WHEN days<=30 THEN 'less than 30' 
    END AS 'days2' 
FROM calender 

ma mi sono dati dei risultati come

id days resultcolumn 
1 10 {null} 
2 20 {null} 
3 30 {null} 
4 25 {null} 
5 5 {null} 
.515.053.691,36321 milioni

come posso il mio risultato originale con istruzione case in MySQL?

risposta

1

lo si può fare senza CASE ... WHEN costrutto. Usa semplicemente la matematica.

SELECT *, 
    CONCAT('less than ', CEIL(`days`/10)*10) AS `resultcolumn` 
FROM `Table1` 

sqlfiddle

Ciò impedisce Branch predication dalla mancata. Quindi sarà faster for large data set.

+0

grande risposta. mi ha aiutato. Molto utile – user1702396

2

Basta rimuovere giorni dopo caso:

SELECT 
    id, 
    days, 
    CASE WHEN days<=10 THEN 'less than 10' 
     WHEN days<=20 THEN 'less than 20' 
     WHEN days<=30 THEN 'less than 30' END AS 'days2' 
FROM calender 
9

Prova questo:

SELECT 
     id, 
     days, 
     CASE WHEN days<=10 THEN 'less than 10' 
      WHEN days<=20 THEN 'less than 20' 
      WHEN days<=30 THEN 'less than 30' END AS 'days2' 
    FROM calender 
1

Prova questa:

SELECT id,days, 
    CASE 
     WHEN days<=10 THEN 'less than 10' 
     WHEN days<=20 THEN 'less than 20' 
     WHEN days<=30 THEN 'less than 30' 
    END AS 'resultcolumn' 
FROM calender