Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL UNION ALL SELECT在获取每列的所有总和时出现问题_Mysql_Sql - Fatal编程技术网

MySQL UNION ALL SELECT在获取每列的所有总和时出现问题

MySQL UNION ALL SELECT在获取每列的所有总和时出现问题,mysql,sql,Mysql,Sql,我希望获得每列的乘积之和,但考虑到第一列已连接,我不确定UNION ALL SELECT是否能够处理所需的结果 代码如下: SUM(product.product_id = 1) AS Soda, SUM(product.product_id = 2) AS Liquor, SUM(product.product_id = 3) AS Lemon, SUM(pr

我希望获得每列的乘积之和,但考虑到第一列已连接,我不确定UNION ALL SELECT是否能够处理所需的结果

代码如下:

                 SUM(product.product_id = 1) AS Soda,
                 SUM(product.product_id = 2) AS Liquor,
                 SUM(product.product_id = 3) AS Lemon,
                 SUM(product.product_id = 4) AS Mango,
                 SUM(product.product_id = 5) AS Inhaler,
                 SUM(1) AS Count

FROM line_item
JOIN product USING (product_id)
JOIN ( SELECT    0 lowest,  500 highest UNION
       SELECT  501   , 1000             UNION
       SELECT 1001   , 1500             UNION
       SELECT 1501   , 2000             UNION
       SELECT 2001   , 2500 ) ranges ON product.price * line_item.quantity BETWEEN ranges.lowest AND ranges.highest
GROUP BY ranges.lowest, ranges.highest

UNION ALL SELECT '','','','','','',
(
    SELECT 
    COUNT(product.price * line_item.quantity)
    FROM (line_item
    INNER JOIN product ON line_item.product_id = product.product_id)
);

**The output:**
+-------------+------+--------+-------+-------+---------+-------+
| Revenue     | Soda | Liquor | Lemon | Mango | Inhaler | Count |
+-------------+------+--------+-------+-------+---------+-------+
| 0 - 500     | 4    | 0      | 4     | 0     | 1       |     9 |
| 501 - 1000  | 0    | 0      | 0     | 2     | 0       |     2 |
| 1001 - 1500 | 0    | 1      | 0     | 2     | 2       |     5 |
| 1501 - 2000 | 0    | 2      | 0     | 0     | 1       |     3 |
| 2001 - 2500 | 0    | 1      | 0     | 0     | 0       |     1 |
|             |      |        |       |       |         |    20 |
+-------------+------+--------+-------+-------+---------+-------+

Thank for your help.

你试过收卷操作员吗?似乎有一个与你类似的问题:

我很困惑。您已经在定义范围。如果需要包含所有值的范围,只需将其添加到:

FROM line_item JOIn
     product
     USING (product_id) JOIN
     ( SELECT    0 lowest,  500 highest UNION ALL
       SELECT  501   , 1000             UNION ALL
       SELECT 1001   , 1500             UNION ALL
       SELECT 1501   , 2000             UNION ALL
       SELECT 2001   , 2500             UNION ALL
       SELECT    0   , 2500             
-------^ all encompassing range
     ) ranges
     ON product.price * line_item.quantity BETWEEN ranges.lowest AND ranges.highest

瞧!这也有摘要行。

我试过了。它实际上是有效的,但它给了我一个空值并重新排序了收入。与其发布一个仅仅链接到另一个答案的答案,不如作为一个副本。