您如何在SELECT语句中使用VALUES()?

地理杰夫

我正在尝试创建符合以下内容的输出:

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来自列表。

不幸的是,我不确定如何加入VALUESSELECT并能够在后者中使用前者。

专线小巴

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章