SQL简化一个特征函数?或 PIVOT 表?
Posted
技术标签:
【中文标题】SQL简化一个特征函数?或 PIVOT 表?【英文标题】:SQL simplify a characteristic function? or PIVOT tables? 【发布时间】:2010-11-01 23:38:12 【问题描述】:我有一张包含一堆日期和价格的表格:
房间名称、价格、预订日期等
我可以像这样转换它:(本质上是翻转列)
SELECT availables.name, rooms.id,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 0, availables.price, '')) AS day1,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 1, availables.price, '')) AS day2,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 2, availables.price, '')) AS day3,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 3, availables.price, '')) AS day4,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 4, availables.price, '')) AS day5,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 5, availables.price, '')) AS day6,
MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 6, availables.price, '')) AS day7,
AVG(availables.price),SUM(availables.price)
FROM `availables`
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.room_id = '18382'
GROUP BY availables.name
这完美地工作并产生了这个:
name id day1 day2 day3 day4 day5 day6 day7 AVG(availables.price) SUM(availables.price)
Bed 18382 23.00 21.00 21.00 21.00 21.00 21.00 21.571429 151.00
但是由于我不知道天数,我该如何简化呢?它可能是1或7?有什么想法吗?
【问题讨论】:
【参考方案1】:查看this answer 及其链接的那些。
【讨论】:
你的两个例子似乎都使用了pivot,我很确定mysql不支持它? 您仍然可以使用几乎相同的动态 SQL 技术来确定列数并生成 SQL 以使用特征函数执行。以上是关于SQL简化一个特征函数?或 PIVOT 表?的主要内容,如果未能解决你的问题,请参考以下文章
R语言广义线性模型函数GLMglm函数构建逻辑回归模型(Logistic regression)去除初步验证不具有显著性的特征再次构建逻辑回归模型简化模型(reduced model)