Reputation: 12847
I have a query which I used PostgreSQL CTE(Common Table Expressions) feature :
WITH tmp_users AS (
SELECT users.id, users.name, users.email, users.created_at,sum(transactions.amount) as credit
FROM users INNER JOIN transactions
ON users.id = transactions.user_id
GROUP BY users.id,users.name,users.email, users.created_at, transactions.user_id
)
SELECT * FROM tmp_users WHERE credit > 100;
I can achieve the results with this :
$result = DB::select("WITH tmp_users AS (
SELECT users.id, users.name, users.email, users.created_at,sum(transactions.amount) as credit
FROM users INNER JOIN transactions
ON users.id = transactions.user_id
GROUP BY users.id,users.name,users.email, users.created_at, transactions.user_id
) SELECT * FROM tmp_users WHERE credit > 100");
But I need the Query Builder not only the results.
Any help would be greatly appreciated.
P.S:
Why I used postgres CTE feature?
Because in PostgreSQL if I want to do any statements on alias fields, I need to use CTE feature(Read more).
Upvotes: 1
Views: 2588
Reputation: 12847
Thank to @wildplasser
$query = DB::table('users')
->select('*')
->from(DB::raw(
'(SELECT u.id, u.name, u.created_at, sum(transactions.amount) as credit
FROM users as u INNER JOIN transactions as t ON u.id = t.user_id
GROUP BY u.id,u.name,u.created_at,t.user_id) as tmp_users'
));
Upvotes: 0
Reputation: 44250
SELECT * FROM
(
SELECT u.id, u.name, u.email, u.created_at
,sum(t.amount) as credit
FROM users u
INNER JOIN transactions t ON u.id = t.user_id
GROUP BY u.id, u.name, u.email , u.created_at -- , t.user_id
) tmp_users
WHERE credit > 100;
Upvotes: 1