简体   繁体   中英

MySQL- Count total records based on different values of same column

I have a table as follows

table_user

id                name                   status                     flag                   country
====================================================================================================
1                  AB                       1                          0                     US
2                  BC                       1                          0                     UK
3                  CD                       0                          0                     IN
4                  DE                       3                          0                     BR
5                  EF                       3                          0                     UK
6                  FG                       2                          0                     IN
7                  GH                       4                          0                     IN

I want to count the no. of records where

status = 1 as totalactiverecords ,

status = 0 as totalinactiverecords ,

status = 3 as totalrecentactiverecords ,

status = 2 as totalemailnotverifiedrecords ,

status = 4 as totalemailverifiedrecords ,

, and country is UK , all in a single SELECT statement .

Is there any specific way to do it?

I have thought of something like

SELECT COUNT(*) as totalactiverecords  WHERE status=1 
        COUNT(*) as totalinactiverecordsWHERE status=0,
        COUNT(*) as totalemailnotverifiedrecords WHERE status=2,
        COUNT(*) as totalrecentactiverecords WHERE status=3,
        COUNT(*) as totalemailverifiedrecords WHERE status=4

FROM table_user where country=IN

,but that does not seem to work.

You can try this query:

SELECT count(case status when '1' then 1 else null end) as totalactiverecords,
    count(case status when '0' then 1 else null end) as totalinactiverecords,
    count(case status when '2' then 1 else null end) as totalemailnotverifiedrecords,
    count(case status when '3' then 1 else null end) as totalrecentactiverecords,
    count(case status when '4' then 1 else null end) as totalemailverifiedrecords 
FROM table_user where country='IN'

I usually use CASE WHEN in this kind of problem:

SELECT sum(case when status = 1 then 1 end) as totalactiverecords,
COUNT sum(case when status = 0 then 1 end) as totalinactiverecords,
COUNT sum(case when status = 2 then 1 end) as totalemailnotverifiedrecord,
COUNT sum(case when status = 3 then 1 end) as totalrecentactiverecords,
COUNT sum(case when status = 4 then 1 end) as totalemailverifiedrecords
FROM table_user where country=IN

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