当我已经计算总行数时如何计算mysql中分组的行数

use*_*858 5 php mysql sql count distinct

我有下表,我想执行以下操作:

  1. 计算每个项目在表格中出现的次数

  2. 计算DISTINCT物品的数量

  3. 按名称对项目进行分组

    +-------+---------+
    |  id   |  names  |
    +-------+---------+
    |   1   |  Apple  |
    |   2   |  Orange | 
    |   3   |  Grape  | 
    |   4   |  Apple  | 
    |   5   |  Apple  | 
    |   6   |  Orange | 
    |   7   |  Apple  | 
    |   8   |  Grape  |  
    +-------+---------+
    
    Run Code Online (Sandbox Code Playgroud)

    对于 1. 和 3. 点,我有以下查询效果很好:

    SELECT * , 
       COUNT(names) as count_name, 
       FROM tbl_products WHERE type = '1' 
       GROUP BY names
    
    Run Code Online (Sandbox Code Playgroud)

    所以我得到:

    Apple  (4)
    Orange (2)
    Grape  (2)
    
    Run Code Online (Sandbox Code Playgroud)

现在我还想计算按行分组的数量并添加一行来计算不同的元素,但是存在一些问题,因为 MySQL 接受查询但无法输出结果:

SELECT * , 
   COUNT(names) as count_name, 
   COUNT(DISTINCT names) as count_total 
   FROM tbl_products WHERE type = '1' 
   GROUP BY names
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议可能是什么问题?

编辑:为了获得更多许可,我想要一张这样的桌子:

    +-------+---------+------------+-------------+
    |  id   |  names  |  count_ctg | count_total |
    +-------+---------+------------+-------------+
    |   1   |  Apple  |      4     |      3      |
    |   2   |  Orange |      2     |      3      |
    |   3   |  Grape  |      2     |      3      |
    +-------+---------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)

Adr*_*uer 1

1-.统计每一项在表中出现的次数:

SELECT names, count(names) FROM tbl_products WHERE type = '1' group by names
Run Code Online (Sandbox Code Playgroud)

2-. 表中存在多少个不同的项目:

SELECT DISTINCT names FROM tbl_products WHERE type = '1'
Run Code Online (Sandbox Code Playgroud)

3-. 按名称对项目进行分组:

SELECT count(DISTINCT names) as Total FROM tbl_products WHERE type = '1'
Run Code Online (Sandbox Code Playgroud)

作为您的最后一次编辑(全部合一):

SELECT id, names, count(names), total FROM tbl_products, (select count(distinct names) as total from tbl_products) as total WHERE type = '1' group by names
Run Code Online (Sandbox Code Playgroud)