2017-05-30 121 views
-4

Group by不工作,可能是因爲我在select選項中使用了數學表達式。Group by Laravel 5.2

select FLOOR(SUM(DATEDIFF(rd.checkin_date,rd.created_at))/COUNT(DATEDIFF(rd.checkin_date,rd.created_at))) AS names, 
COUNT(rd.id) as totbooking, 
SUM(DATEDIFF(rd.checkout_date,rd.checkin_date)) AS nights, 
round(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100) AS revenue, 
round((round(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100))/(SUM(DATEDIFF(rd.checkout_date,rd.checkin_date)))) as adr, FLOOR((FLOOR(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100))/COUNT(rd.id)) as atp, FLOOR(SUM(DATEDIFF(rd.checkin_date,rd.created_at))/COUNT(DATEDIFF(rd.checkin_date,rd.created_at))) as leadtime, 
SUM(DATEDIFF(rd.checkout_date,rd.checkin_date))/(COUNT(rd.id)) as alos, (SUM(DATEDIFF(rd.checkout_date,rd.checkin_date))/(h.total_rooms * 31))*100 as share from `reservation_details` as `rd` 
left join `hotels` as `h` on `rd`.`hotel_id` = `h`.`id` 
left join `currencies` as `cur` on `cur`.`id` = `h`.`currency_id` 
left join `chains` as `c` on `c`.`id` = `h`.`chain_id` 
where `rd`.`status` >= 50 and date(rd.created_at) >= "2017-04-30" and date(rd.created_at) <= "2017-05-30" GROUP BY names 
+1

你的格式可以嗎?無法閱讀 – nacho

+1

沒有顯示錯誤?那我稱之爲工作。 – Chay22

+0

@nacho請立即檢查 –

回答

0

爲什麼不要你試試這個辦法?如果你讓我們看到一些數據會有幫助

select names,sum(totbooking),sum(nights),sum(revenue),sum(adr),leadtime,sum(alos),sum(share) 
from (
    select FLOOR(SUM(DATEDIFF(rd.checkin_date,rd.created_at))/COUNT(DATEDIFF(rd.checkin_date,rd.created_at))) AS names, COUNT(rd.id) as totbooking, 
    SUM(DATEDIFF(rd.checkout_date,rd.checkin_date)) AS nights,round(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100) AS revenue, 
    round((round(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100))/(SUM(DATEDIFF(rd.checkout_date,rd.checkin_date)))) as adr, FLOOR((FLOOR(SUM(CASE WHEN h.currency_id=151 THEN rd.total_cents WHEN h.currency_id!=151 THEN rd.total_cents/cur.exchange_rate ELSE 0 END)/100))/COUNT(rd.id)) as atp, FLOOR(SUM(DATEDIFF(rd.checkin_date,rd.created_at))/COUNT(DATEDIFF(rd.checkin_date,rd.created_at))) as leadtime, 
    SUM(DATEDIFF(rd.checkout_date,rd.checkin_date))/(COUNT(rd.id)) as alos, (SUM(DATEDIFF(rd.checkout_date,rd.checkin_date))/(h.total_rooms * 31))*100 as share 
    from `reservation_details` as `rd` 
    left join `hotels` as `h` on `rd`.`hotel_id` = `h`.`id` 
    left join `currencies` as `cur` on `cur`.`id` = `h`.`currency_id` 
    left join `chains` as `c` on `c`.`id` = `h`.`chain_id` 
    where `rd`.`status` >= 50 and date(rd.created_at) >= "2017-04-30" and date(rd.created_at) <= "2017-05-30") 
group by names 
+0

它返回單行,但我想要列表@nacho –

+0

@Rakesh Tripathi如果您上傳一些帶有數據的表以查看您需要的內容,這將有很大幫助 – nacho

0

您正在使用的別名,所以GROUP BY子句中你應該使用它太 我supose names屬於hotels,所以你需要做這種方式

GROUP BY h.names 
+0

他的「名字」的意思是'FLOOR(SUM(DATEDIFF(rd.checkin_date,rd.created_at))/ COUNT(DATEDIFF(rd.checkin_date,rd.created_at)))AS名稱' –

+0

對不起,我沒有看到它 – nacho

+0

正確@HoàngĐăng –