MySQL Join Query на возрастной диапазон

0

У меня 3 таблицы, с которыми я работаю, которые содержат то, что мне нужно для моего запроса. Мне нужно вернуть возрастные группы для определенного диапазона дат продажи и отображать прибыль для каждого. Вот запрос, который я возвращаю:

# 1241 - Операнд должен содержать 1 столбец (ов)

Кажется, я не могу обернуть голову вокруг этого.

SELECT DealInfo.DeliveryDate, Coalesce(SUM(Commissions.GrossProfit),0) as GP, CASE 
WHEN age < 16 THEN 'Under 16'
WHEN age BETWEEN 16 and 20 THEN '16 - 20' 
WHEN age BETWEEN 21 and 25 THEN '21 - 25' 
WHEN age BETWEEN 26 and 30 THEN '26 - 30' 
WHEN age BETWEEN 31 and 35 THEN '31 - 35' 
WHEN age BETWEEN 36 and 40 THEN '36 - 40' 
WHEN age BETWEEN 41 and 45 THEN '41 - 45' 
WHEN age BETWEEN 46 and 50 THEN '46 - 50' 
WHEN age BETWEEN 51 and 55 THEN '51 - 55' 
WHEN age > 55 THEN 'Over 55' 
WHEN age IS NULL THEN 'NULL' END as age_range, 
COUNT(*) AS RC FROM (SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age
FROM customers WHERE Customers.dob<>'0000-00-00' and Customers.server_id = '0000001412') as derived
GROUP BY age_range
ORDER BY age_range ASC
from DealInfo 
LEFT JOIN Commissions on Commissions.Deal_ID=DealInfo.Deal_Number and Commissions.server_id=DealInfo.server_id 
WHERE DealInfo.server_id = '0000001412' and DealInfo.Status=2 and Coalesce(Commissions.GrossProfit,0)>0 and 
dealinfo.DeliveryDate BETWEEN '2017-01-01' AND '2017-12-31'
  • 0
    Если это полный запрос (а не просто часть запроса), то это неправильный запрос, поскольку он не может выдать указанную вами ошибку. Для меня - и всех остальных, желающих взглянуть - это выдает синтаксическую ошибку. Что справедливо, потому что у вас есть предложение FROM после ORDER BY.
Теги:

1 ответ

1
SELECT DealInfo.DeliveryDate, 
       Coalesce(SUM(Commissions.GrossProfit),0) as GP, 
       (SELECT CASE WHEN age < 16 THEN 'Under 16' 
                    WHEN age BETWEEN 16 and 20 THEN '16 - 20' 
                    WHEN age BETWEEN 21 and 25 THEN '21 - 25' 
                    WHEN age BETWEEN 26 and 30 THEN '26 - 30' 
                    WHEN age BETWEEN 31 and 35 THEN '31 - 35' 
                    WHEN age BETWEEN 36 and 40 THEN '36 - 40' 
                    WHEN age BETWEEN 41 and 45 THEN '41 - 45' 
                    WHEN age BETWEEN 46 and 50 THEN '46 - 50' 
                    WHEN age BETWEEN 51 and 55 THEN '51 - 55' 
                    WHEN age > 55 THEN 'Over 55' 
                    WHEN age IS NULL THEN 'NULL' END as age_range, 
                    COUNT(*) AS RC 
        FROM (SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age 
              FROM   customers 
              WHERE  Customers.dob<>'0000-00-00' 
              and    Customers.server_id = '0000001412') as derived 
        GROUP BY age_range 
        ORDER BY age_range ASC) 
from   DealInfo 
LEFT JOIN Commissions 
on     Commissions.Deal_ID = DealInfo.Deal_Number 
and    Commissions.server_id = DealInfo.server_id 
WHERE  DealInfo.server_id = '0000001412' 
and    DealInfo.Status=2 
and Coalesce(Commissions.GrossProfit,0) > 0

Ваш скалярный подзапрос:

        (SELECT CASE WHEN age < 16 THEN 'Under 16' 
                    WHEN age BETWEEN 16 and 20 THEN '16 - 20' 
                    WHEN age BETWEEN 21 and 25 THEN '21 - 25' 
                    WHEN age BETWEEN 26 and 30 THEN '26 - 30' 
                    WHEN age BETWEEN 31 and 35 THEN '31 - 35' 
                    WHEN age BETWEEN 36 and 40 THEN '36 - 40' 
                    WHEN age BETWEEN 41 and 45 THEN '41 - 45' 
                    WHEN age BETWEEN 46 and 50 THEN '46 - 50' 
                    WHEN age BETWEEN 51 and 55 THEN '51 - 55' 
                    WHEN age > 55 THEN 'Over 55' 
                    WHEN age IS NULL THEN 'NULL' END as age_range, 
                    COUNT(*) AS RC 
        FROM (SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age 
              FROM   customers 
              WHERE  Customers.dob<>'0000-00-00' 
              and    Customers.server_id = '0000001412') as derived 
        GROUP BY age_range 
        ORDER BY age_range ASC)

возвращает 2 столбца, он должен возвращать только один столбец.

  • 0
    Похоже, ваш запрос точно такой же, как у меня, и он возвращает ту же ошибку.
  • 0
    Очевидно, вы должны изменить свой производный подзапрос.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню