简体   繁体   中英

how to get total number of records from multiple records in mysql query

I have run this below query

SELECT 
    SUBSTRING_INDEX(prim_key ,":" , 1) prim_key, 
    SUBSTRING_INDEX(prim_key ,":" , -1) urid, 
    CASE WHEN basicname = 'Q914'  THEN 'SHC'
         WHEN basicname = 'QP913'  THEN 'PHC'
         WHEN basicname = 'QC1214'  THEN 'CHC'
         WHEN basicname = 'QD1014'  THEN 'DH/SDH'
         ELSE 'UNKOWN' 
    END AS Status 
FROM facility_data 
WHERE 1 = 1
    AND basicname in ( 'Q914'  , 'QP913' , 'QC1214' , 'QD1014' ) 
    and prim_key like  '3_10_%' 
ORDER BY  prim_key ASC

I need to modify slightly, I want it to display total no of SHC , DH , PHC and CHC.

So please tell me what should i do to display Total no of shc, dh,phc and chc.

SELECT status
     , Count(*)
FROM   (
        SELECT CASE basicname
                 WHEN 'Q914'   THEN 'SHC'
                 WHEN 'QP913'  THEN 'PHC'
                 WHEN 'QC1214' THEN 'CHC'
                 WHEN 'QD1014' THEN 'DH/SDH'
               END AS status
        FROM   facility_data 
        WHERE  basicname in ('Q914', 'QP913', 'QC1214', 'QD1014' )
        AND    prim_key like  '3_10_%'
       ) As x
GROUP
    BY status

If you want it grouped by prim_key and urid then

SELECT prim_key
     , urid
     , status
     , Count(*)
FROM   (
        SELECT SUBSTRING_INDEX(prim_key, ':', +1) As prim_key
             , SUBSTRING_INDEX(prim_key, ':', -1) As urid
             , CASE basicname
                 WHEN 'Q914'   THEN 'SHC'
                 WHEN 'QP913'  THEN 'PHC'
                 WHEN 'QC1214' THEN 'CHC'
                 WHEN 'QD1014' THEN 'DH/SDH'
               END AS status
        FROM   facility_data 
        WHERE  basicname in ('Q914', 'QP913', 'QC1214', 'QD1014' )
        AND    prim_key like  '3_10_%'
       ) As x
GROUP
    BY prim_key
     , urid
     , status

You can use SUM with an IF statement inside if it is sufficient for you to get one row with just the counts (this you uses where ).

 SELECT
     sum(if(basicname = 'Q914',1,0)) as SHC,
     sum(if(basicname = 'QP913',1,0)) as PHC,
     sum(if(basicname = 'QC1214',1,0)) as CHC,
     sum(if(basicname = 'QD1014',1,0)) as DH
 FROM facility_data 
 WHERE
     basicname in ( 'Q914'  , 'QP913' , 'QC1214' , 'QD1014' ) 
     and prim_key like  '3_10_%' 
 ORDER BY  prim_key ASC

or you use a GROUP BY if you want to have multiple rows as result (requires Using temporary; Using filesort ):

 SELECT
     CASE WHEN basicname = 'Q914'  THEN 'SHC'
          WHEN basicname = 'QP913'  THEN 'PHC'
          WHEN basicname = 'QC1214'  THEN 'CHC'
          WHEN basicname = 'QD1014'  THEN 'DH/SDH'
          ELSE 'UNKOWN' 
     END AS Status,
     COUNT(*) as `count`
 FROM facility_data 
 WHERE
     basicname in ( 'Q914'  , 'QP913' , 'QC1214' , 'QD1014' ) 
     and prim_key like  '3_10_%' 
 GROUP BY basicname
 ORDER BY  prim_key ASC

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM