2013-08-24 85 views
0

我正在嘗試以下查詢用於計算/報告目的,但它給出錯誤。MySQL同一表計算錯誤結果

SELECT c.idx, c.club_name, s.sale_event_date, 
COUNT(s.*) AS total_guests, 
(SELECT COUNT(s.*) FROM sales s WHERE t2.qr_scanned = 1 AND t2.sale_event_date = s.sale_event_date) AS total_scanned_guests, 
SUM(s.rep_sale_commission) AS total_rep_commission, 
SUM(s.sale_commission) AS total_admin_fees 
FROM club c 
LEFT JOIN sales s ON s.club_id = c.idx 
WHERE c.admin_id = 37 
GROUP BY s.sale_event_date 
ORDER BY sale_event_date DESC 

錯誤是:

use near '*) AS total_guests, (SELECT COUNT(s.id) FROM sales s WHERE t2.qr_scanned = 1 AN' at line 2 
+0

什麼錯誤.... ?? – iJade

+0

@iBlue問題已更新! – seoppc

回答

0

變化

COUNT(s*) AS total_guests 

COUNT(*) AS total_guests 

COUNT(s.id) AS total_guests 

至少,這似乎是你的直接問題。

+0

不,這是錯字,我已更新的問題,並仍然顯示相同的錯誤 – seoppc

1

你不包括count(*)表的別名。

一旦你解決了這個問題,你會發現你在子查詢中有一個別名問題。我覺得子查詢的別名應該t2而非s

SELECT c.idx, c.club_name, s.sale_event_date, COUNT(*) AS total_guests, 
     (SELECT COUNT(*) 
     FROM sales t2 
     WHERE t2.qr_scanned = 1 AND t2.sale_event_date = s.sale_event_date 
     ) AS total_scanned_guests, 
     SUM(s.rep_sale_commission) AS total_rep_commission, 
     SUM(s.sale_commission) AS total_admin_fees 
FROM club c LEFT JOIN 
    sales s ON s.club_id = c.idx 
WHERE c.admin_id = 37 
GROUP BY s.sale_event_date 
ORDER BY sale_event_date DESC; 

其實,我不認爲你需要的子查詢的。它看起來像你只是想有條件的聚合:

SELECT c.idx, c.club_name, s.sale_event_date, COUNT(sales.club_id) AS total_guests, 
     sum(s.qr_scanned = 1) AS total_scanned_guests, 
     SUM(s.rep_sale_commission) AS total_rep_commission, 
     SUM(s.sale_commission) AS total_admin_fees 
FROM club c LEFT JOIN 
    sales s ON s.club_id = c.idx 
WHERE c.admin_id = 37 
GROUP BY s.sale_event_date 
ORDER BY sale_event_date DESC; 
+0

謝謝,有沒有什麼好辦法刪除子查詢? – seoppc

+0

太好了,謝謝,讓我試試 – seoppc

+0

@seoppc。 。 。看我最後的編輯。 –