比如说,我需要把"某个类别的可用物品数量"的ratio分为"所有物品的数量".请考虑这样一个MySQL表:

/*

mysql> select * from Item;
+----+------------+----------+
| ID | Department | Category |
+----+------------+----------+
|  1 | Popular    | Rock     |
|  2 | Classical  | Opera    |
|  3 | Popular    | Jazz     |
|  4 | Classical  | Dance    |
|  5 | Classical  | General  |
|  6 | Classical  | Vocal    |
|  7 | Popular    | Blues    |
|  8 | Popular    | Jazz     |
|  9 | Popular    | Country  |
| 10 | Popular    | New Age  |
| 11 | Popular    | New Age  |
| 12 | Classical  | General  |
| 13 | Classical  | Dance    |
| 14 | Classical  | Opera    |
| 15 | Popular    | Blues    |
| 16 | Popular    | Blues    |
+----+------------+----------+
16 rows in set (0.03 sec)

mysql> SELECT Category, COUNT(*) AS Total
    -> FROM Item
    -> WHERE Department='Popular'
    -> GROUP BY Category;
+----------+-------+
| Category | Total |
+----------+-------+
| Blues    |     3 |
| Country  |     1 |
| Jazz     |     2 |
| New Age  |     2 |
| Rock     |     1 |
+----------+-------+
5 rows in set (0.02 sec)

*/

我需要的基本上是一个类似于此的结果集:

/*
+----------+-------+-----------------------------+
| Category | Total | percentage to the all items | (Note that number of all available items is "9")
+----------+-------+-----------------------------+
| Blues    |     3 |                          33 | (3/9)*100
| Country  |     1 |                          11 | (1/9)*100
| Jazz     |     2 |                          22 | (2/9)*100
| New Age  |     2 |                          22 | (2/9)*100
| Rock     |     1 |                          11 | (1/9)*100
+----------+-------+-----------------------------+
5 rows in set (0.02 sec)

*/

我怎样才能在single query分钟内取得这样的成绩?

提前谢谢.

推荐答案

SELECT Category, COUNT(*) AS Total , (COUNT(*) / (SELECT COUNT(*) FROM Item WHERE Department='Popular')) * 100 AS 'Percentage to all items', 
FROM Item
WHERE Department='Popular'
GROUP BY Category;

我不确定MySql的语法,但可以使用如图所示的子查询.

Mysql相关问答推荐

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

如何查询一行

根据日期重叠转换表格

在 .NET 6 中使用 Dapper Framework 未能成功连接到 MySql

如何通过SQL来计算到达特定值的行的数量

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

时间戳上滚动窗口的 SQL 计数不同

for each 查询设置 MySQL @@session.time_zone 而不是 CONVERT_TZ 的缺点?

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

优化解析 5000 万行 MySQL 表的请求

如何在 axios 请求中将更新的设置状态值作为参数传递

Mysql,显示谁已经和没有 Select 退出巴士服务

如何通过未知列中的唯一值有效地更新 MySQL 行

为什么 ORDER BY 'id' 'desc' 不返回语法错误?

结果差异(MySQL 5.7 vs MySQL 8.0)

用于国际和多语言目的的数据库建模

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

更改 Laravel 的 created_at 和 updated_at 的名称

在osx的命令行中使用Mysql-找不到命令?

如何在执行 sql 脚本时 echo 打印语句