Создание представления MySQL с использованием агрегата COUNT - PullRequest
2 голосов
/ 28 октября 2019

Я создаю стандартный запрос COUNT с предложением GROUP BY.

CREATE VIEW view1 AS
SELECT
    t2.column3                  ,
    t1.id AS t1_id              ,
    t2.column4                  ,
    COUNT ( t3.id ) AS t3_count , -- Error here
    COUNT ( t4.id ) AS t4_count
FROM      table1 t1
LEFT JOIN table2 t2 ON t2.column1 = 25 AND
                       t2.column2 = t1.id
LEFT JOIN table3 t3 ON t3.column1 = t1.id
LEFT JOIN table4 t4 ON t4.column1 = t1.id
GROUP BY t2.column3 ,
         t1.id      ,
         t2.column4 ;

Но это выдает ошибку:

Error Code: 1630. FUNCTION mydb.COUNT does not exist.

Почему MySQL считает, что я 'пытаюсь вызвать пользовательскую функцию в моей базе данных?
Разве она не распознает COUNT как встроенную агрегатную операцию?

Я также пытался COUNT ( t3.* ), но это дало общий синтаксисошибка.
Я не могу использовать COUNT ( * ), потому что одновременно подсчитывается несколько LEFT JOINS.

1 Ответ

4 голосов
/ 28 октября 2019

Я бы удалил пробелы:

CREATE VIEW view1 AS
SELECT
    t2.column3                  ,
    t1.id AS t1_id              ,
    t2.column4                  ,
    COUNT(t3.id) AS t3_count , -- Error here
    COUNT(t4.id) AS t4_count
FROM      table1 t1
LEFT JOIN table2 t2 ON t2.column1 = 25 AND
                       t2.column2 = t1.id
LEFT JOIN table3 t3 ON t3.column1 = t1.id
LEFT JOIN table4 t4 ON t4.column1 = t1.id
GROUP BY t2.column3 ,
         t1.id      ,
         t2.column4 ;

db <> fiddle demo

SELECT COUNT(*)
-- 1

SELECT COUNT (*)
-- You have an error in your SQL syntax; 

SELECT COUNT ( * )
-- You have an error in your SQL syntax; 

Приложение:

Как прокомментировал @ Пол Шпигель , это поведение можно изменить:

set session sql_mode = concat(@@sql_mode, ',IGNORE_SPACE');

SELECT COUNT ( * )
-- 1

db <> fiddle demo2

...