You seem to be getting there. But you need 2 queries to use union https://laravel.com/docs/9.x/queries#unions
Jul 24, 2022
3
Level 10
Help converting MySQL query to laravel query
Hello,
I am stuck and cannot figure out how to convert this query into a laravel query. Maybe I'm overthinking it or just having a blank moment.
Here's the query:
SELECT salesperson_id,
SUM(CASE WHEN salesperson_two_id IS NULL THEN 1 ELSE 0.5 END) totalDeals
FROM (
SELECT salesperson_id, salesperson_two_id, sold_date FROM sold_logs
UNION ALL
SELECT salesperson_two_id, salesperson_id, sold_date FROM sold_logs WHERE salesperson_two_id IS NOT NULL
) t
WHERE MONTH(sold_date) = 7 AND YEAR(sold_date) = 2022
GROUP BY salesperson_id
ORDER BY totalDeals DESC;
Here's my attempt:
DB::table('sold_logs')
->select('salesperson_two_id')
->selectRaw("SUM(CASE WHEN salesperson_two_id IS NULL THEN 1 ELSE 0.5 END) totalDeals")
->select('salesperson_id, salesperson_two_id, sold_date')
->unionAll()
->select('salesperson_two_id, salesperson_id, sold_date')
->whereNotNull('salesperson_two_id')
->groupBy('salesperson_two_id')
->get();
Which obviously does not work.
DB table structure:
| id | salesperson_id | salesperson_two_id | sold_date
| --- | --- | ------- | ------
| 1 | 5 | null | 2022-07-02
| 2 | 3 | 5 | 2022-07-18
| 3 | 4 | null | 2022-07-16
| 4 | 5 | 3 | 2022-07-12
| 5 | 3 | 5 | 2022-07-17
| 6 | 5 | null | 2022-07-18
Desired output, which it provides when I run it straight in MySQL:
| salesperson_id | totalDeals |
| --- | ---
| 5 | 3.5
| 3 | 1.5
| 4 | 1
Any help would be greatly appareciated.
Please or to participate in this conversation.