【问题标题】:select columns based on multiple values根据多个值选择列
【发布时间】:2014-10-04 05:25:06
【问题描述】:

我有如下数据:

data.csv
company  year  value
A        yz    x

当 value 为

SELECT * FROM data WHERE value < "X" AND year ="2005" AND year="2006" AND year="2007" AND year="2008";

上面没有任何结果。所以本质上是:给我所有在过去 YZ 年价值低于 X 的公司。

【问题讨论】:

    标签: sql


    【解决方案1】:

    你有一个永远不可能成立的条件。不能同时是 2005 年和 2006 年。

    试试in:

    SELECT *
    FROM   data
    WHERE  value < "X"
    AND    year in ("2005", "2006", "2007", "2008")
    ;
    

    in 检查year 是否为以下值之一。

    or:

    SELECT *
    FROM   data
    WHERE  value < "X"
    AND    ( year = "2005"
             or year = "2006"
             or year = "2007"
             or year = "2008"
           )
    ;
    

    or 只是检查左侧右侧条件是否为真。

    【讨论】:

    • 干杯,但这并没有真正给我想要的东西。我想要在 YZ1 和 YZ2 之间的整个时间段内价值
    • 查询每年检查value &lt; "X"。您的意思是要检查总数吗?
    • 没错。我应该把它翻过来吗?例如,我想:公司 A 的价值低于 X 总共 13 年,这是我数据中的时间段。公司 B 的价值低于 X 总共 11 年。我希望结果显示公司 A,而不是公司 B。
    • 这是一项非常艰巨的任务,因为您需要一个字段的累积总和并将其与其他字段的结果进行比较......这比您当前的问题要深入得多。我建议提出一个新问题,解释您想要的所有详细信息、您的数据库平台等。
    • 啊,可能是我有点压力,没有想通。我会发布一个新的:) 对标题有什么建议吗?欢呼
    【解决方案2】:

    考虑将字符串格式从年份更改为日期时间,然后您可以像这样简单地选择:

    SELECT * FROM data WHERE value &lt; "X" AND year(year) &gt;=2005;

    你也可以使用:

    SELECT * FROM data WHERE value &lt; "X" AND YEAR IN (2005, 2006, 2007, 2008);

    【讨论】:

    • 我可以轻松转换为日期时间,但这并不能真正提供所需的输出,请参阅@Patrick Hofman 下面的帖子
    【解决方案3】:

    这应该适合你:

    SELECT * FROM data WHERE value < "X" AND YEAR IN (2005, 2006, 2007, 2008)
    

    【讨论】:

    • 这确实回答了这个问题,但您可以添加更多关于 IN 如何工作的上下文,例如。
    猜你喜欢
    • 2016-10-03
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多