그래서 식당 당 내 시스템의 반복 주문량을 계산하려고합니다. 이는 해당 레스토랑에서 두 번 이상 주문한 사용자 수 (이메일 주소, 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와 같은 기본 쿼리에서 필요한 필드를 사용할 수있게됩니다. 하지만, 여기에 간다 다음 NUM_ORDERS 하위 쿼리가 I이이 num_rep_orders 하위 쿼리가 다시 여러 행이오고 일이
실행되는 순서에 의한 추측하고있다대로, 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 doesnt 존재 문제로 실행하면 할 수있는 하나의 값으로 돌아오고 싶습니다.
그래서 내 질문은 : 어떻게 1 개 이상의 행이 하위 쿼리로 실행하지 않고 내가 필요로이 값을받을 수 있나요, 그리고 r_id가 존재하지 않습니다?
그런 다음이 2 가지 값에서 나는 백분율을 알아낼 수 있으며 모두 그 육즙이어야합니다 :) 어떤 도움을 많이 주셨습니다!
야 ...! 아주 잘 대답하고, 매우 우아한 해결책 :) 많은 감사! – Horse