Сойти с ума!!!!
На Access работает, а на MySQL не хочет. И я беру трюк на пост здесь.
Здесь запрос:
SELECT A.B_ID,
B.CNT_B,
B.MAX_PRICE,
B.SUM_AB,
B.SUM_C_AB,
B.UNIQUE_B,
B.Costi,
B.COUNTDOWN,
A.AUCT_ID
FROM MONITOR AS A
INNER JOIN
(SELECT B_ID,
COUNT(B_ID) AS CNT_B,
MAX(PREZZO_ATTUALE) AS MAX_PRICE,
SUM(TOT_PUNT_AB) AS SUM_AB,
SUM(TOT_CAMBI_AB) AS SUM_C_AB,
(CNT_B-SUM_AB) AS UNIQUE_B,
(0.035*3*CNT_B+MAX_PRICE) AS COSTI,
45-SUM(CONT_PROVV_AB) AS COUNTDOWN
FROM MONITOR
WHERE AUCT_ID = '123456789'
GROUP BY B_ID) AS B
ON A.B_ID= B.B_ID
WHERE A.AUCT_ID = '123456789'
ORDER BY B.MAX_PRICE DESC,
B.CNT_B DESC
показывает
ОШИБКА: [MySQL] [Драйвер ODBC 3.51] [mysqld-5.5.33-31.1-log] Неизвестный столбец «CNT_B» в «списке полей»
Если я выйду из CNT_B, он скажет мне MAX_PRICE и так далее.
Я уверен. Это проклятие INNER JOIN!
Здесь скрипка с ошибкой
РЕШЕНИЕ
Я не могу использовать значение ALIAS внутри того же подзапроса.
Таким образом, новый ДЕЙСТВИТЕЛЬНЫЙ запрос:
SELECT A.B_ID,
B.CNT_B,
B.MAX_PRICE,
B.SUM_AB,
B.SUM_C_AB,
B.UNIQUE_B,
B.Costi,
B.COUNTDOWN,
A.AUCT_ID
FROM MONITOR AS A
INNER JOIN
(SELECT B_ID,
COUNT(B_ID) AS CNT_B,
MAX(PREZZO_ATTUALE) AS MAX_PRICE,
SUM(TOT_PUNT_AB) AS SUM_AB,
SUM(TOT_CAMBI_AB) AS SUM_C_AB,
(COUNT(B_ID)-SUM(TOT_PUNT_AB)) AS UNIQUE_B,
(0.035*3*COUNT(B_ID)+MAX(PREZZO_ATTUALE)) AS COSTI,
45-SUM(CONT_PROVV_AB) AS COUNTDOWN
FROM MONITOR
WHERE AUCT_ID = '123456789'
GROUP BY B_ID) AS B
ON A.B_ID= B.B_ID
WHERE A.AUCT_ID = '123456789'
ORDER BY B.MAX_PRICE DESC,
B.CNT_B DESC
Спасибо
Оскар
C.MAX_PRICE
? - person hjpotter92   schedule 02.11.2013SHOW CREATE TABLE MONITOR
были бы хорошими, но я заметил, что ваш запрос ссылается наC.MAX_PRICE
, когда не указана таблицаC
, так что это должно быть исправлено. Дох, снайпер. - person zanlok   schedule 02.11.2013