【问题标题】:MySQL UNION ALL SELECT Issue on getting all the SUM per columnMySQL UNION ALL SELECT 关于获取每列的所有 SUM 的问题
【发布时间】:2020-11-22 04:46:11
【问题描述】:

我希望得到每列产品的总和,不确定 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.

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您尝试过 ROLL UP 运算符吗?好像有和你类似的问题:Add a summary row with totals

    【讨论】:

    • 我试过了。它确实有效,但它给了我一个 NULL 值并重新排序收入。
    • 不要发布仅链接到另一个答案的答案,而是将flag the question作为副本发布。
    【解决方案2】:

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

    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
    

    瞧!这也有摘要行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2021-11-20
      相关资源
      最近更新 更多