mysql 计算重复行数_Mysql计算重复行的百分比

所以我试图计算每个餐厅系统中重复订单的数量.这被定义为从该餐馆订购了多次的用户数(基于他们的电子邮件地址,eo_email).架构下的示例

这是代表我的餐馆的表格

CREATE TABLE IF NOT EXISTS `lf_restaurants` (

`r_id` int(8) NOT NULL AUTO_INCREMENT,

`r_name` varchar(128) DEFAULT NOT NULL,

PRIMARY KEY (`r_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

INSERT INTO `lf_restaurants` (`eo_id`, `eo_ref_id`) VALUES

('1', 'Restaurant X'),

('2', 'Cafe Y');

这是我的订单表

CREATE TABLE IF NOT EXISTS `ecom_orders` (

`eo_id` mediumint(9) NOT NULL AUTO_INCREMENT,

`eo_ref_id` varchar(12) DEFAULT NOT NULL,

`eo_email` varchar(255) DEFAULT NOT NULL,

`eo_order_parent` int(11) NOT NULL,

PRIMARY KEY (`eo_id`),

) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

INSERT INTO `ecom_orders` (`eo_id`, `eo_ref_id`, `eo_email`, `eo_order_parent`) VALUES

('', '', 'a@a.com', '1'),

('', '', 'a@a.com', '1'),

('', '', 'a@a.com', '1'),

('', '', 'a@a.com', '1'),

('', '', 'a@a.com', '1'),

('', '', 'b@b.com', '1'),

('', '', 'b@b.com', '1'),

('', '', 'c@c.com', '1'),

('', '', 'd@d.com', '1'),

('', '', 'e@e.com', '1'),

('', '', 'a@a.com', '2'),

('', '', 'c@c.com', '2'),

('', '', 'c@c.com', '2'),

('', '', 'e@e.com', '2');

所以餐厅X(r_id 1)有10个订单.用户a@a.com和b@b.com已多次从该餐厅订购,c @ c.com,d @ d.com和e@e.com仅订购一次,因此需要退货40%

Cafe Y(r_id 2)有4个订单.用户c@c.com订购了两次,用户a@a.com和e@e.com只订购了一次,因此需要返回33%

我不确定发布我已经得到的东西将会更好,因为我一直在遇到’Subquery有超过1个结果’或者如果我将该子查询包含在它自己的虚拟查询中,并且不会让我使用字段I需要来自主要查询,如r_id.但是这里:

SELECT r_name,

(SELECT COUNT(*) AS cnt_users

FROM (

SELECT *

FROM ecom_orders

WHERE eo_order_parent = r_id

GROUP BY eo_email

) AS cnt_dummy

) AS num_orders,

(SELECT COUNT(*) AS cnt

FROM ecom_orders

WHERE eo_order_parent = r_id

GROUP BY eo_order_parent, eo_email

) AS num_rep_orders

FROM lf_restaurants

ORDER BY num_orders DESC

num_orders子查询说它不识别r_id,因为我猜这是由于执行事物的顺序

num_rep_orders子查询以多行的形式返回,但实际上我希望它只返回一个值,如果我将它设置为num_orders子查询但我会遇到r_id不存在的问题,我可以这样做.

所以我的问题是:如何在不进入子查询的情况下获得我需要的这些值超过1行,并且r_id不存在?

然后从这两个值我可以计算百分比,所有应该是肉汁:)任何帮助非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值