Search code examples
mysqlsqldatabaseheidisql

Count Nested Case in SQL


I want to display a rows train with id_user and id_train Can I nested a case statement in count function sql?

My SQL is here but it errors

SELECT ticket.*
       , COUNT( CASE trans.id_user WHEN 1 THEN 1  
CASE trans.id_train WHEN 1 THEN 1
ELSE NULL END) AS total_ticket
       , SUM(train.price) AS total_price
       , user.* 
FROM train JOIN trans ON trans.id_train = kereta.id_train 
JOIN user ON trans.id_user = user.id_user 
JOIN ticket ON ticket.train = train.id_train;

Solution

  • COUNT( CASE trans.id_user  WHEN 1 THEN 1  
           CASE trans.id_train WHEN 1 THEN 1
                               ELSE NULL END ) AS total_ticket
    

    Unclear construction. Looks like you need one of below variants.

    COUNT( CASE WHEN trans.id_user  = 1 THEN 1  
                WHEN trans.id_train = 1 THEN 1
                                        ELSE NULL END ) AS total_ticket
    -- which may be simplified to 
    SUM(1 IN (trans.id_user, trans.id_train)) AS total_ticket
    
    COUNT( CASE WHEN trans.id_user  = 1 
                 AND trans.id_train = 1 THEN 1
                                        ELSE NULL END ) AS total_ticket
    -- which may be simplified to 
    SUM(trans.id_user  = 1 AND trans.id_train = 1) AS total_ticket