首页 / MYSQL / Mysql计算重复行的百分比
Mysql计算重复行的百分比
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql计算重复行的百分比,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3394字,纯文字阅读大概需要5分钟。
内容图文
![Mysql计算重复行的百分比](/upload/InfoBanner/zyjiaocheng/905/245410bb22b64aeb89d2c01aa461ff64.jpg)
所以我试图计算每个餐厅系统中重复订单的数量.这被定义为从该餐馆订购了多次的用户数(基于他们的电子邮件地址,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不存在?
然后从这两个值我可以计算百分比,所有应该是肉汁:)任何帮助非常感谢!
解决方法:
So Restaurant X (r_id 1) has 10 orders. Users a@a.com and b@b.com have
ordered from that restaurant multiple times, and c@c.com, d@d.com, and
e@e.com have only ordered once, so it would need to return 40%Cafe Y (r_id 2) has 4 orders. User c@c.com has ordered twice, users
a@a.com and e@e.com have only ordered once, so it would need to return
33%
好的.因此,让我们从获得重复客户的数量开始.
SELECT eo_order_parent, eo_email, COUNT(eo_email) AS orders FROM ecom_orders
GROUP BY eo_order_parent, eo_email
HAVING orders > 1;
和不同客户的总数
SELECT eo_order_parent, COUNT(eo_email) FROM ecom_orders
GROUP BY eo_order_parent;
但我们可以一气呵成:
SELECT eo_order_parent,
SUM(CASE WHEN orders > 1 THEN 1 ELSE 0 END) AS repeats,
SUM(1) AS total FROM
(
SELECT eo_order_parent, eo_email, COUNT(*) AS orders FROM ecom_orders
GROUP BY eo_order_parent, eo_email
) AS eo_group_1
GROUP BY eo_order_parent;
这给出了:
+-----------------+---------+-------+
| eo_order_parent | repeats | total |
+-----------------+---------+-------+
| 1 | 2 | 5 |
| 2 | 1 | 3 |
+-----------------+---------+-------+
2 rows in set (0.00 sec)
然后2/5是你的40%,而1/3是33%.
内容总结
以上是互联网集市为您收集整理的Mysql计算重复行的百分比全部内容,希望文章能够帮你解决Mysql计算重复行的百分比所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。