そのため、システム内のレストランごとのリピート注文の量を計算しようとしています。これは、そのレストランから 2 回以上注文した (メール アドレス 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 は 1 回しか注文していないため、返す必要があります。 40%
カフェ Y (r_id 2) には 4 つの注文があります。ユーザー c@c.com は 2 回注文しましたが、ユーザー a@a.com と e@e.com は 1 回だけ注文したため、33% を返す必要があります。
「サブクエリに複数の結果があります」に遭遇し続けるか、そのサブクエリを独自のダミークエリでカウント付きでラップすると、フィールドを使用できなくなります。 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 が存在しないという問題が発生します。
だから私の質問は次のとおりです。サブクエリに遭遇せずに必要なこれらの値を取得するにはどうすればよいですか?複数の行があり、r_id が存在しませんか?
次に、これらの2つの値からパーセンテージを計算でき、すべてが肉汁になるはずです:)どんな助けも大歓迎です!