8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何使该子查询返回多行?

Damian 1月前

48 0

我从临时表中选择数据:CREATE TEMPORARY TABLE IF NOT EXISTS \'tmp\' ( \'fuel_type\' TEXT, \'litres\' NUMERIC(8,2), \'is_rent\' BOOLEAN);...

我从临时表中选择数据:

CREATE TEMPORARY TABLE IF NOT EXISTS "tmp" 
(
    "fuel_type" TEXT,
    "litres" NUMERIC(8,2),
    "is_rent" BOOLEAN
);
insert into tmp values ('petrol', 10, False);
insert into tmp values ('petrol', 20, False);
insert into tmp values ('diesel', 20, False);

像这样:

SELECT
    (SELECT row(fuel_type, SUM(litres)) 
     FROM tmp 
     GROUP BY fuel_type);

fuel_type 多个 tmp ,我会收到此错误:

SQL 错误 [21000]:错误:用作表达式的子查询返回了多行

我期望这个输出

ARRAY_AGG
fuel_type|litres
petrol,40
diesel,20
帖子版权声明 1、本帖标题:如何使该子查询返回多行?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Damian在本站《sql》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 不清楚您预期的结果到底是什么。找到数据后,选择命令会返回包含行和列的结果。从您的预期结果中,我无法(毫无疑问地)断定它是一行还是两行,也不是一列还是两列(撇开上面无法解释的 ARRAY_AGG)。

    1. 如果您想要 1 列 2 行 数据, 名为 \'fuel_type | litres\':
    Select    Concat( fuel_type, ', ', Sum(litres) ) as "fuel type | litres"
    From      tmp
    Group By fuel_type
    
     __________________
    |fuel type | litres|
    |------------------|
    |diesel, 20.00     |
    |------------------|
    |petrol, 30.00     |
     ------------------
    
    1. 假设有列两行 数据 (燃料类型和升数):
    Select    fuel_type, Sum(litres) as litres
    From      tmp
    Group By  fuel_type
    
     _________________
    |fuel_type| litres|
    |---------|-------|
    |diesel   |  20.00|
    |---------|-------|
    |petrol   |  30.00|
     -----------------
    
    1. 如果它应该是 名为“fuel_type | litres”的 1 列 1 行 数据
    Select    Distinct STRING_AGG(Concat( fuel_type, ', ', litres ), ' 
    ') Over() as "fuel type | litres"
    From      ( Select    fuel_type, Sum(litres) as litres
                From      tmp
                Group By  fuel_type
              )
    
     __________________
    |fuel type | litres|
    |------------------|
    |diesel, 20.00     |
    |petrol, 30.00     |
     ------------------  
    

    在这里 查看 .

  • 为什么你要费尽心机编写这么多不必要的代码(和额外的开销),而你只需要使用 SELECT FuelType, SUM(Litres) as Litres FROM tmp GROUP BY FuelType 就可以了?根本没有理由使用 STRING_AGG 来得到原始发帖人想要的输出。

  • 为什么提问时我不应该上传代码/数据/错误的图片?另外:只有代码的帖子很差。解释问题和解决方案。另外:这个问题显然是一个很容易找到的旧问题,初学者应该关闭而不是回答。如何回答如何提问帮助中心

  • 问题在于您的查询构造方式。请尝试以下代码以获取预期的输出。

    WITH FuelSums AS (
        SELECT 
            fuel_type, 
            SUM(litres) AS total_litres
        FROM 
            tmp2
        GROUP BY 
            fuel_type
    )
    SELECT 
        STRING_AGG(CONCAT(fuel_type, ',', total_litres), '; ') AS fuel_data
    FROM 
        FuelSums;
    
返回
作者最近主题: