mysql - 使用MySQL对多个条件进行计数操作

标签 mysql sql

以下是包含表 es_preadmission 示例数据的架构

  admno  |pre_gender|pre_class| pre_scat_id |bpl |sgc |handi|ser_cat
---------|----------|---------|-------------|----|----|-----|--------
    1    |Male      |1        |GEN          |no  |no  |no   |1
    2    |Male      |1        |GEN          |no  |no  |no   |1
    3    |Male      |1        |GEN          |bpl |no  |no   |1
    4    |Female    |2        |GEN          |no  |sgc |no   |1
    5    |Male      |1        |SC           |no  |no  |no   |1
    6    |Female    |1        |GEN          |no  |no  |no   |1
    7    |Female    |2        |GEN          |no  |no  |no   |5
    8    |Male      |2        |GEN          |bpl |no  |no   |1
    9    |Male      |2        |ST           |no  |no  |no   |1
    10   |Male      |1        |OBC          |no  |no  |no   |3
    11   |Female    |1        |ST           |no  |no  |no   |5
    12   |Male      |2        |GEN          |no  |no  |no   |1
    13   |Male      |2        |SC           |no  |no  |PH   |1
    14   |Female    |2        |SC           |bpl |no  |no   |1
    15   |Female    |1        |GEN          |no  |no  |no   |2

**我正在尝试获取每个类别(GEN、SC、ST、OBC)、bpl、sgc、handi、ser_cat 类(class)的男女学生数量。示例

        1       2 
      M   F   M   F
GEN   20  9   25  10
SC    5   2   9   4
ST    0   3   0   0
OBC   1   2   1   0
PH    0   0   1   0
BPL   2   3   7   2
** 现在为了实现上述数字,我正在尝试这样的事情 -

SELECT pre_scat_id AS cat, pre_gender, COUNT(admno)
FROM es_preadmission
WHERE pre_scat_id IN ('GEN','SC','ST','OBC')
GROUP BY pre_scat_id, pre_gender
UNION ALL
SELECT pre_handi AS cat, pre_gender, COUNT(admno)
FROM es_preadmission
WHERE pre_handi = 'Yes' OR pre_handi = 'No'
GROUP BY pre_handi, pre_gender
UNION ALL
SELECT pre_bpl AS cat, pre_gender, COUNT(admno)
FROM es_preadmission
WHERE pre_bpl = 'Yes' OR pre_bpl ='No'
GROUP BY pre_bpl, pre_gender;

但是我没有得到想要的输出。以下输出是根据上述查询在实际数据库上绘制的。

cat|pre_gender|COUNT(admno)
GEN| Female   |216
GEN| Male     |371
OBC| Female   |30
OBC| Male     |50
SC | Female   |36
SC | Male     |65
ST | Male     |9
No | Female   |281
No | Male     |495
PH | Male     |1
No | Female   |268
No | Male     |467
bpl| Female   |13
bpl| Male     |25

需要帮助如何明智地获取输出类

最佳答案

您需要聚合不同的 CASE,例如对于第一个选择:

SELECT pre_scat_id AS cat
  , COUNT(CASE WHEN pre_gender = 'Male'   AND pre_class = 1 THEN 1 END) AS M1
  , COUNT(CASE WHEN pre_gender = 'Female' AND pre_class = 1 THEN 1 END) AS F1
  , COUNT(CASE WHEN pre_gender = 'Male'   AND pre_class = 2 THEN 1 END) AS M2
  , COUNT(CASE WHEN pre_gender = 'Female' AND pre_class = 2 THEN 1 END) AS F2
FROM es_preadmission
WHERE pre_scat_id IN ('GEN','SC','ST','OBC')
GROUP BY pre_scat_id

关于mysql - 使用MySQL对多个条件进行计数操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22284062/

相关文章:

mysql - 无法使用该表上的条件调用来更新表

php - MySQL InnoDB 事务回滚不起作用

php - 如何在codeigniter中依次更新两个表数据?

php - MYSQL OR 一列上的两个值

sql - 如何仅选择出现在 SQL Select 语句中特定符号之前的字符

php - 表关系问题 - 从第二个表收集信息

mysql - SQL - 使用表格找出出版商每本书有多少种类型

mysql - 三表Natural Join怎么做?

sql - 如何替换所有外键?

php - 使用 XMLWriter 将变量数据输出为 CDATA XML