如何从子查询返回多个值

时间:2014-11-25 14:23:51

标签: sql hive

SELECT state, business, a.report
FROM base
WHERE state IN
  (SELECT a.state FROM heart a join (SELECT CAST(MAX(percent_adults) AS DOUBLE) max1 FROM heart)b on (a.percent_adults=b.max1));

在上面的子查询中,只能返回一个值,即表格中的a.state' heart'。 该值在主查询中使用,并从' base'中提取业务。桌子。我需要从#heart;' heart'报告中的子查询表以及州和企业。非常感谢!

4 个答案:

答案 0 :(得分:1)

使用exists代替in

SELECT state, business, a.report
FROM base b
WHERE EXISTS (SELECT 1
              FROM heart h JOIN
                   (SELECT MAX(percent_adults) as max1
                    FROM heart h2
                   ) sb
                   ON h.percent_adults = h2.max1
              WHERE h.state = b.state and h.business = b.business
             );

不要转换最大值,尤其是转换为浮点表示。比较浮点值是否相等通常很危险,但

的结果

答案 1 :(得分:0)

Is it possible for a subquery to return two values?

您需要在FROM子句中使用子查询来执行此操作。

答案 2 :(得分:0)

在定义子查询两次之外,我不确定是否有更有效的方法可以使用子查询来完成此操作。

但是,或许JOIN在这里会更有用:

SELECT a.state, business, a.report
FROM base b
JOIN heart a ON (a.percent_adults = b.max1 AND b.state = a.state)

答案 3 :(得分:0)

您不需要子查询返回两个值。您需要的所有子查询都是提供唯一的连接值(依赖于两个计算的双精度值完全相同的几率)。

所以,只需进行加入并从中选择报告:

select  b.state, b.business, a.report
from    base  b
join    heart a
  on    a.state = b.state
where   a.percent_adults =(
          select  max( percent_adults )
          from    heart );

您将联接限制为只有percent_adult值最高的州,并从中获取报告。