【发布时间】:2018-09-14 11:56:35
【问题描述】:
我有一个这样的查询。我试图将其转换为查询生成器样式。但是因为它太复杂了,所以我遇到了麻烦。
我喜欢使用 whereIn 。但是,如果我使用原始数据库查询,我必须自己编写代码(获取集合放置逗号等),以便我正在寻找一种使其对 laravel 查询构建器友好的方法。
SELECT
total_amount_until_now/total_orders_until_now as avg_order_value_now,
total_amount_until_a_month_ago/total_orders_until_a_month_ago as avg_order_value_until_a_month_ago
FROM(
SELECT
COUNT(DISTINCT a.order_id)
FILTER (WHERE CURRENT_DATE >= b.order_creation_date AND b.seller_id IN (1, 3)) AS total_orders_until_now,
SUM(invoice_amount)
FILTER (WHERE CURRENT_DATE >= b.order_creation_date AND b.seller_id IN (1, 3)) AS total_amount_until_now,
COUNT(DISTINCT a.order_id)
FILTER (WHERE CURRENT_DATE - INTERVAL '1 month' > b.order_creation_date AND b.seller_id IN (1, 3)) AS total_orders_until_a_month_ago,
SUM(invoice_amount)
FILTER (WHERE CURRENT_DATE - INTERVAL '1 month' > b.order_creation_date AND b.seller_id IN (1, 3)) AS total_amount_until_a_month_ago
FROM
order_items a
INNER JOIN orders b ON a.order_id = b.order_id) xyz"
这是我的尝试,我无法成功
DB::select()
->selectSub(`total_amount_until_now`, `avg_order_value_now`)
->selectSub(`/`, `avg_order_value_now`)
->selectSub(`total_orders_until_now`, `avg_order_value_now`)
->selectSub(`total_amount_until_a_month_ago`, `avg_order_value_until_a_month_ago`)
->selectSub(`/`, `avg_order_value_until_a_month_ago`)
->selectSub(`total_orders_until_a_month_ago`, `avg_order_value_until_a_month_ago`)
->from(`SELECT COUNT(DISTINCT a.order_id) FILTER ( WHERE CURRENT_DATE >= b.order_creation_date AND b.seller_id IN (1, 3) ) AS total_orders_until_now, SUM(invoice_amount) FILTER ( WHERE CURRENT_DATE >= b.order_creation_date AND b.seller_id IN (1, 3) ) AS total_amount_until_now, COUNT(DISTINCT a.order_id) FILTER ( WHERE CURRENT_DATE - INTERVAL 1 month > b.order_creation_date AND b.seller_id IN (1, 3) ) AS total_orders_until_a_month_ago, SUM(invoice_amount) FILTER ( WHERE CURRENT_DATE - INTERVAL 1 month > b.order_creation_date AND b.seller_id IN (1, 3) ) AS total_amount_until_a_month_ago FROM order_items a INNER JOIN orders b ON a.order_id = b.order_id as xyz`)
->get();
【问题讨论】:
-
抱歉,这太糟糕了,无法阅读。有没有办法只在 laravel 中使用纯 SQL?我保证你的数据库索引运行的速度比 PHP 中运行的任何东西都快。
标签: mysql laravel postgresql