3.6 计数行

作者: 笑Skr人啊 | 来源:发表于2017-04-07 15:51 被阅读0次

    数据库经常用于回答这个问题,“某个类型的数据在表中出现的频度?”例如,你可能想要知道你有多少宠物,或每位主人有多少宠物,或你可能想要对你的动物进行各种类型的普查。

    计算你拥有动物的总数目与“在pet表中有多少行?”是同样的问题,因为每个宠物有一个记录。COUNT(*)函数计算行数,所以计算动物数目的查询应为:

    
    mysql> SELECT COUNT(*) FROM pet;
    +----------+
    | COUNT(*) |
    +----------+
    |        9 |
    +----------+
    
    • 在前面,你检索了拥有宠物的人的名字。如果你想要知道每个主人有多少宠物,你可以使用COUNT( )函数:
    mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
    +--------+----------+
    | owner  | COUNT(*) |
    +--------+----------+
    | Benny  |        2 |
    | Diane  |        2 |
    | Gwen   |        3 |
    | Harold |        2 |
    +--------+----------+
    

    注意,使用GROUP BY对每个owner的所有记录分组,没有它,你会得到错误消息:

    mysql> SELECT owner, COUNT(*) FROM pet;
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) 
    with no GROUP columns is illegal if there is no GROUP BY clause
    

    COUNT( )和GROUP BY以各种方式分类你的数据。下列例子显示出进行动物普查操作的不同方式。

    • 每种动物的数量:
    mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
    +---------+----------+
    | species | COUNT(*) |
    +---------+----------+
    | bird    |        2 |
    | cat     |        2 |
    | dog     |        3 |
    | hamster |        1 |
    | snake   |        1 |
    +---------+----------+
    
    • 每种性别的动物数量:
    mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
    +------+----------+
    | sex  | COUNT(*) |
    +------+----------+
    | NULL |        1 |
    | f    |        4 |
    | m    |        4 |
    +------+----------+
    

    (在这个输出中,NULL表示“未知性别”。)

    • 按种类和性别组合的动物数量:
    mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
    +---------+------+----------+
    | species | sex  | COUNT(*) |
    +---------+------+----------+
    | bird    | NULL |        1 |
    | bird    | f    |        1 |
    | cat     | f    |        1 |
    | cat     | m    |        1 |
    | dog     | f    |        1 |
    | dog     | m    |        2 |
    | hamster | f    |        1 |
    | snake   | m    |        1 |
    +---------+------+----------+
    
    • 若使用COUNT( ),你不必检索整个表。例如, 前面的查询,当只对狗和猫进行时,应为:
      SELECT species, sex, COUNT() FROM pet GROUP BY species, sex;
      mysql> SELECT species, sex, COUNT(
      ) FROM pet
      -> WHERE species = 'dog' OR species = 'cat'
      -> GROUP BY species, sex;
      +---------+------+----------+
      | species | sex | COUNT() |
      +---------+------+----------+
      | cat | f | 1 |
      | cat | m | 1 |
      | dog | f | 1 |
      | dog | m | 2 |
      +---------+------+----------+
      SELECT species, sex, COUNT(
      ) FROM pet GROUP BY species, sex;

    • 如果你仅需要知道已知性别的按性别的动物数目:

     SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
    mysql> SELECT species, sex, COUNT(*) FROM pet
        -> WHERE sex IS NOT NULL
        -> GROUP BY species, sex;
    +---------+------+----------+
    | species | sex  | COUNT(*) |
    +---------+------+----------+
    | bird    | f    |        1 |
    | cat     | f    |        1 |
    | cat     | m    |        1 |
    | dog     | f    |        1 |
    | dog     | m    |        2 |
    | hamster | f    |        1 |
    | snake   | m    |        1 |
    +---------+------+----------+
    

    相关文章

      网友评论

        本文标题:3.6 计数行

        本文链接:https://www.haomeiwen.com/subject/lrmhattx.html