当前位置: 首页 > 面试题库 >

选择不同的拥有点数独特条件

干善
2023-03-14
问题内容

我一直在寻找答案,但是找不到完全根据条件获取此不同记录集的方法。我有一个包含以下示例数据的表:

Type    Color   Location    Supplier
----    -----   --------    --------
Apple   Green   New York    ABC
Apple   Green   New York    XYZ
Apple   Green   Los Angeles ABC
Apple   Red     Chicago     ABC
Apple   Red     Chicago     XYZ
Apple   Red     Chicago     DEF
Banana  Yellow  Miami       ABC
Banana  Yellow  Miami       DEF
Banana  Yellow  Miami       XYZ
Banana  Yellow  Atlanta     ABC

我想创建一个查询,以显示唯一位置数量大于1的每种不同Type + Color的唯一位置的计数,例如

Type    Color   UniqueLocations
----    -----   --------
Apple   Green   2
Banana  Yellow  2

请注意,{Apple,Red,1}不会出现,因为红苹果(Chicago)只有1个位置。我想我已经有了这个(但是也许有一个更简单的方法)。我正在使用:

SELECT Type, Color, Count(Location) FROM
(SELECT DISTINCT Type, Color, Location FROM MyTable)
GROUP BY Type, Color HAVING Count(Location)>1;

当唯一查询的唯一位置计数大于1时Type, Color,如何创建另一个查询,该查询列出,并且Location针对每个不同查询?结果记录集如下所示:Type,Color``Type,Color

Type    Color   Location
----    -----   --------
Apple   Green   New York
Apple   Green   Los Angeles
Banana  Yellow  Miami
Banana  Yellow  Atlanta

请注意,Apple, Red, Chicago由于红苹果只有1个位置,因此未出现。谢谢!


问题答案:

使用COUNT(DISTINCT Location)并加入针对一个子查询上Type,并ColorGROUP BYHAVING条款,你试图使用他们将做的工作。

/* Be sure to use DISTINCT in the outer query to de-dup */
SELECT DISTINCT
   MyTable.Type,
   MyTable.Color,
   Location
FROM 
  MyTable
  INNER JOIN (
    /* Joined subquery returns type,color pairs having COUNT(DISTINCT Location) > 1 */
    SELECT
      Type,
      Color,
      /* Don't actually need to select this value - it could just be in the HAVING */
      COUNT(DISTINCT Location) AS UniqueLocations
    FROM
      MyTable
    GROUP BY Type, Color
    /* Note: Some RDBMS won't allow the alias here and you 
       would have to use the expanded form
       HAVING COUNT(DISTINCT Location) > 1
     */
    HAVING UniqueLocations > 1
  /* JOIN back against the main table on Type, Color */
  ) subq ON MyTable.Type = subq.Type AND MyTable.Color = subq.Color

这是一个示范



 类似资料:
  • 我需要一个查询来列出 Spark 中唯一的复合分区键。 CASSANDRA: 中的查询非常快,但是将相同类型的数据过滤器放在 RDD 或 Spark 中.sql相比之下检索结果的速度非常慢。 例如 其中表格格式如下: Spark不是在其查询中使用cassandra优化吗? 我如何有效地检索此信息?

  • 问题内容: 这是我无法弄清楚的非常基本的查询。 假设我有一个两列的表格,如下所示: 我想获取所有具有1、2和3的不同用户ID 。使用上面的示例,我要返回的唯一结果是1。我该怎么做? 问题答案: 任何人阅读本:我的答案是简单明了的,并得到了“接受”的地位,但请不要去阅读答案通过@cletus给出。它具有更好的性能。 只是大声思考一下,@ cletus所描述的编写自联接的另一种方法是: 这对您来说可能

  • 我试图根据类模板参数确定调用成员函数的哪个版本。我试过: 我认为这是说“如果T是int,则使用第一个MyFunction,如果T不是int,则使用第二个MyFunction,但我收到编译器错误说“错误:在'结构std::enable_if'中没有名为'type'的类型”。有人能指出我在这里做错了什么吗?

  • 问题内容: 我需要一个相对简单的查询,但是JPA使其很难创建。 SQL变量如下所示: [编辑:OrderID不是主键。表格中可以有更多等于的OrderId] 我需要设置一个传递给我的方法的变量。 我找到了文档, 但似乎无法将它们全部包装在一起。 这是我到目前为止的内容: 问题答案:

  • 问题内容: 我有一个名为“工作”的表。对于特定用户,作业可以是活动的,已归档的,过期的,待处理的或已关闭的。现在,每个页面请求都生成5个COUNT查询,为了进行优化,我试图将其减少为单个查询。到目前为止,这是我所拥有的,但这仅比5个单独的查询要快。请注意,我已经简化了每个子查询的条件,以使其更易于理解,但是完整查询的行为相同。 有没有一种方法可以在不使用无效子查询的情况下在同一查询中获得这5个计数

  • 问题内容: 由于某些性能原因,我试图找到一种仅选择所选节点中同级节点的方法。例如, 如果选择了inner1节点,是否可以访问其兄弟节点? 问题答案: 好吧…确定…先拜访父母,再拜访孩子。 或者…使用jQuery: 编辑:Cletus一如既往地鼓舞人心。 我进一步挖掘。这就是jQuery本质上如何获得兄弟姐妹的方式: