mysql 如何通过一个sql语句搜出比例关系

例如 一个表格里有
商品,价格,日期 三个字段
a 10.2,20151008
a 9.2,20151009
a 7.2,20151010
b 11.2,20151008
b 10.2,20151008

我要搜 在历史上各个商品价格低于10¥的次数占该商品出现的总次数的百分比,应该如何写mysql语句呢?
谢谢了
搜出结果要类似
a 2/3
b 0/2

这样的sql语句怎么写呢?

5个回答

假设表名是ProductPrice, 商品,价格,日期字段名称分别是product、price、date。
”历史上“这个时间概念暂不清楚对应哪段时间,暂用某天之前来代替。这样统计sql如下:

 SELECT product, SUM(CASE WHEN price < 10 THEN 1 ELSE 0 END)/COUNT(price) percentage FROM  ProductPrice GROUP BY product;

结果类似:

 product percentage
a 0.8971
b 0.1341

如果不行用小数表示百分比,可以这么写把分子和分母的值作为字符串用"/"拼起来

  SELECT product, CONCAT(SUM(CASE WHEN price < 10 THEN 1 ELSE 0 END), '/', COUNT(price)) percentage FROM  ProductPrice GROUP BY product;
wwwsssaaaddd
诸相非相 修正一下,sql里加上某天之前这个条件:即是在 Group By语句之前加上 where date < '某天'
4 年多之前 回复

--取得每个商品的数目
select count(商品) from 表 where 价格 <10 group by 商品 --取得低于10的每个商品数目

select c2 / c1 from (select n1 商品, c1 count(商品) from 表 group by 商品 ) A ,(select n2 商品, c2 count(商品) from 表 where 价格 <10 group by) B where A.n1 =B,n2

select count(商品) from 表 group by 商品--取得每个商品的数目

沙发的Sql在测试过程中有问题, 返回值变成了 二进制 类型, 解决办法 , 给 SUM(CASE WHEN price < 10 THEN 1 ELSE 0 END) 做类型转换成 char .

原因不详,有知道的吗?

wwwsssaaaddd
诸相非相 什么数据库?mysql上没有这个问题。sum的结果本来呢是数字,或许有的数据库会把数字处理成二进制
4 年多之前 回复

图片说明
图片说明
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问