2011-03-24 57 views
2

我想得到一个计数,按天分组。下面的SELECT正常工作:为什么在MySQL中每个有效的SELECT都不是有效的VIEW?

SELECT COUNT(time_end), 
     time_end 
    FROM main 
GROUP BY DAY(time_end) 

我复制/粘贴到这一点的phpmyadmin的视图创建的形式,出现此错误:

"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count(time_end)) AS SELECT count(time_end) , time_end FROM main GROUP BY d' at line 4"

这里是从的phpmyadmin的形式生成完整的SQL:

CREATE ALGORITHM = UNDEFINED VIEW `count by day` (
    time_end, 
    count(time_end) 
) AS SELECT COUNT(time_end), 
      time_end 
     FROM main 
    GROUP BY DAY(time_end) 

怎么了?为什么有效的SELECT不会自动成为有效的VIEW创建?谢谢。

回答

4

不知道phpMyAdmin在哪里获取该语法。用途:

CREATE VIEW COUNT_BY_DAY AS 
    SELECT COUNT(time_end), 
     time_end 
    FROM main 
GROUP BY DAY(time_end) 

要知道,你是依靠MySQL's hidden column functionality - 在TIME_END值将被适当地(不能上总是返回相同的值,值的数量从增加到选择依赖)。它也不能移植到大多数数据库,你必须重新编写它。

另外,如果你不是按月限制的话,你的计数将会在第28-31天的时间内出现偏差。并非所有月份都有31天。

2

您的查询唯一错误的是您的列名称没有反标。

CREATE ALGORITHM = UNDEFINED VIEW count by day (
`count(time_end)` # you needed to put this in backticks
time_end,
) AS SELECT COUNT(time_end),
time_end
FROM main
GROUP BY DAY(time_end)

为什么它的价值,你有错误的方式列名称。

您正在使用的语法是查看列名的EXPLICIT NAMING。它允许您为列指定名称,否则将从查询列中导出派生的,例如,

CREATE VIEW X AS 
SELECT time_end, other1 
FROM main 

:: X contains the columns `time_end` and `other1` 

CREATE VIEW X (TheStopTime, DataPoint) AS 
SELECT time_end, other1 
FROM main 

:: X contains the columns `TheStopTime` and `DataPoint` 
相关问题