mysql - 按百分比排序汇总结果?

标签 mysql sql select aggregate

我的表格“产品”:

id:
1
2
3
4

我的另一个表 'productSet'

id / specification
1  / 1
1  / n
1  / n
1  / n
1  / 1
2  / 1
2  / n
2  / n
3  / 1
3  / n
3  / n
3  / 1
3  / n
3  / n
3  / n
4  / 1
4  / n
4  / n
4  / 1

product.id = productSet.id

count(productSet WHERE id LIKE '1') = 5
count(productSet WHERE id LIKE '1' AND specification LIKE 'n') = 3
percent = (100-((3*100)/5)) = 40%

count(productSet WHERE id LIKE '2') = 3
count(productSet WHERE id LIKE '2' AND specification LIKE 'n') = 2
percent = (100-((2*100)/3)) = 33,33%

count(productSet WHERE id LIKE '3') = 7
count(productSet WHERE id LIKE '3' AND specification LIKE 'n') = 5
percent = (100-((5*100)/7)) = 28,57%

count(productSet WHERE id LIKE '4') = 4
count(productSet WHERE id LIKE '4' AND specification LIKE 'n') = 2
percent = (100-((2*100)/4)) = 50%

我需要结果描述

4 (50%)
1 (40%)
2 (33,33%)
3 (28,57)

请帮我完成这个命令。我不知道从哪里开始。

最佳答案

这是一个简单的聚合查询。好好利用GROUP BYSUM()COUNT()给你一个准确的答案,而且非常有效。 http://sqlfiddle.com/#!2/95546c/8/0

SELECT id, 
       COUNT(*) AS total_count, 
       SUM(specification <> 'n') AS non_n_count,
       100.0 * SUM(specification <> 'n') / COUNT(*) AS percent
  FROM productSet
 GROUP BY id
 ORDER BY 4 DESC

这里的技巧是实现表达式 specification <> 'n'为表中存在非空值 specification 的每一行生成零值或一值.因此,将这些值相加可以得到满足标准的行数。

ORDER BY 4 DESC按第四列降序排列结果集。

关于mysql - 按百分比排序汇总结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340674/

相关文章:

mysql - 比较 SQL 中特定条目的日期范围

mysql - 根据当前表和每个单独的行向 SQL SELECT 查询输出添加额外的列

php - 使用 PHP 和 MySQL 的随机句子

php - 使用PHP邮件功能发送电子邮件,邮件服务器的配置

mysql - 如何检查带有 max、count 等 sql 函数的查询返回 NULL?

mysql - 连接 sql 行

javascript - 如何通过 refs 以编程方式在 React 中设置选定的值?

mysql - 从一个表中选择行,仅连接另一个表的一行

MYSQL django测试错误: django. db.utils.InternalError : (7,“重命名时出错

mysql - MYSQL 控制台屏幕上的问号是什么意思?