【问题标题】:SQL simplify a characteristic function? or PIVOT tables?SQL简化一个特征函数?或 PIVOT 表?
【发布时间】: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?有什么想法吗?

【问题讨论】:

    标签: mysql sql pivot aggregate-functions


    【解决方案1】:

    查看this answer 及其链接的那些。

    【讨论】:

    • 你的两个例子似乎都使用了pivot,我很确定MySQL不支持它?
    • 您仍然可以使用几乎相同的动态 SQL 技术来确定列数并生成 SQL 以使用特征函数执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2019-09-14
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-26
    相关资源
    最近更新 更多