我的表格“产品”:
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 BY
与 SUM()
和 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/