所以我試圖計算我的系統中每個餐廳的重複訂單數量。這被定義爲已經從該餐館多次訂購的用戶數量(基於他們的電子郵件地址eo_email)。架構Mysql計算重複行的百分比
這裏下的例子是代表我的餐館
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
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '1'),
('', '', '[email protected]', '2'),
('', '', '[email protected]', '2'),
('', '', '[email protected]', '2'),
('', '', '[email protected]', '2');
所以餐廳X(R_ID 1)有10個訂單。用戶[email protected]和[email protected]多次從該餐廳訂購,[email protected],[email protected]和[email protected]只訂購了一次,因此需要返回40%
咖啡廳Y(r_id 2)有4個訂單。用戶[email protected]已經訂購了兩次,用戶[email protected]和[email protected]只訂購了一次,所以需要返回33%
我不確定發佈我已經得到的當我繼續運行'Subquery有超過1個結果'時,或者如果我用自己的虛擬查詢將該子查詢打包爲一個計數,它不會讓我使用主查詢所需的字段,例如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不存在?
然後從這兩個值我可以計算出百分比,所有應該是肉汁:)任何幫助非常感謝!
哥們兒!非常好的回答,非常優雅的解決方案:)非常感謝! – Horse