2013-08-24 3 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. , , См. Мое последнее изменение. –

Смежные вопросы