【问题标题】:How do you use VALUES() in a SELECT statement?如何在 SELECT 语句中使用 VALUES()?
【发布时间】:2020-03-20 19:36:35
【问题描述】:

我正在尝试创建类似于以下内容的输出:

days_since, item_count
7, 0
30, 1
90, 2

我想以列表的形式提供days_since 的值,例如:

SELECT d.days, d.item_count
FROM (
    VALUES (7, 0), (30, 1), (90, 2)
) d (days, item_count)

除了item_count,我需要使用days 作为计算某些条件(is_a_thing)结果的查询的一部分,例如:

SELECT COUNT(CASE WHEN is_a_thing THEN 1 END) AS item_count
FROM items
WHERE created >= CURRENT_DATE - 30

但要比较的日期(此处为 30)应该是列表中的days。

很遗憾,我不知道如何将VALUES 加入SELECT 并能够在后者中使用前者。

【问题讨论】:

    标签: mysql sql database group-by sum


    【解决方案1】:

    MySQL 不支持该语法(即您不能使用VALUES() 创建派生表。

    最近的版本具有VALUES(ROW ...) 语法:

    SELECT d.days, d.item_count
    FROM (VALUES ROW(7, 0), ROW(30, 1), ROW(90, 2)) d (days, item_count)
    

    在早期版本中,我们必须恢复UNION ALL:

    SELECT d.days, d.item_count
    FROM (
        SELECT 7 days, 0 item_count
        UNION ALL SELECT 30, 1
        UNION ALL SELECT 90, 2
    ) d
    

    我怀疑你想要的查询是:

    SELECT d.days, SUM(CASE WHEN is_a_thing THEN 1 ELSE 0 END)item_count
    FROM (VALUES ROW(7), ROW(30), ROW(90)) d (days)
    LEFT JOIN items i
        ON i.created >= CURRENT_DATE - INTERVAL d.days
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多