【问题标题】:Vanilla SQL that selects multiple values in single column在单列中选择多个值的普通 SQL
【发布时间】:2011-09-25 11:28:18
【问题描述】:

如果我有一张表,其中一列中包含客户 ID,另一列中包含时区,是否有一个简单的 SQL 语句可以选择具有不同时区值的所有客户 ID?换句话说,我想找到那些在纽约、芝加哥和旧金山设有办事处的客户,而不是那些只在一个或其他时区设有办事处的客户。

【问题讨论】:

    标签: sql sql-match-all


    【解决方案1】:
    SELECT Customer
    FROM MyTable
    GROUP BY Customer
    HAVING COUNT(DISTINCT TimeZone) > 1
    

    DISTINCT 的使用很重要。

    COUNT(TimeZone) 计算所有非空值,而不仅仅是不同的值。所以它等价于 COUNT(*),除了 TimeZone 为空。

    换句话说,如果给定客户有三个办事处,但都在东部时区,则 COUNT(TimeZone) 将为 3,而 COUNT(DISTINCT TimeZone) 将为 1。

    【讨论】:

    • +1 对于独特的。我也更新了我自己的答案以纠正:)
    【解决方案2】:
    SELECT Customer
    FROM MyTable
    GROUP BY Customer
    HAVING COUNT(DISTINCT TimeZone) > 1
    

    【讨论】:

      【解决方案3】:

      丑陋但有效:

      select CustomerID
      where  CustomerID in 
      (
      select customerID from
           (select distinct CustomerID
           from   table
           where  TimeZone in ('NY','CHI','SF')) t
      having count(*) = 3
      )
      

      【讨论】:

        猜你喜欢
        • 2022-06-23
        • 2018-06-18
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        相关资源
        最近更新 更多