繁体   English   中英

SQL-将选择语句中具有不同列数的两个查询合并为一个

[英]SQL - merge two queries with different number of columns in select statement into one

这是两个单独运行时可以按预期运行的SQL查询。 我尝试将它们与UNIONUNION ALL合并为一个SQL,但是显然由于每种方法返回的列数不同,所以我无法使用这些技术。

我正在使用的数据在这里

这是我要合并的两个独立查询

查询一

SET group_concat_max_len = 100485760;           
SELECT
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 50/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS aa
    ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 75/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS bb
    ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 85/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS cc
    ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 95/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS dd
    ,MAX(NUM_PRODS) AS MAAX 
FROM 
    SALES_INFO

查询二

SET group_concat_max_len = 100485760;   
SELECT
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 75/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS ee
FROM 
    SALES_INFO
WHERE
        SALE_DATE >= DATE_SUB(curdate(), INTERVAL 2 WEEK)

我可以请求帮助将这两个查询合并为一个吗?

您可以在选择中使用子查询,如下所示:

SELECT CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 50/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS 50per
       ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 75/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS 75per
       ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 85/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS 85per
       ,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 95/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS 95per    
       ,MAX(NUM_PRODS) AS MAAX 
       ,(SELECT CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NUM_PRODS ORDER BY NUM_PRODS SEPARATOR ','),',', 75/100 * COUNT(*) + 1),',', -1) AS DECIMAL) AS 2weeks
         FROM SALES_INFO
         WHERE SALE_DATE >= DATE_SUB(curdate(), INTERVAL 2 WEEK)
         ORDER BY 2weeks limit 1) as 2weeks
FROM 
    SALES_INFO

您没有指定这两个查询之间的关系,也没有指定它们的数据结构,因此,对于第一个结果,目前它是有限的,如果那不是您需要的,请更新您的要求,然后我将更新答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM