[英]How do I write this GROUP BY in mysql UNION query
Trying to group the results of two queries together. 尝试将两个查询的结果组合在一起。 When I run this query: 当我运行此查询时:
SELECT pr_id,
pr_sbtcode,
pr_sdesc,
od_quantity,
od_amount
FROM (
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `bgOrderMain`
INNER JOIN `bgOrderData`
INNER JOIN `bgProducts`
WHERE `bgOrderMain`.`or_id` = `bgOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
UNION
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `npOrderMain`
INNER JOIN `npOrderData`
INNER JOIN `bgProducts`
WHERE `npOrderMain`.`or_id` = `npOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
) TEMPTABLE3;
it produces this result 它产生了这个结果
+--------+--------------+----------------+---------------+------------+
| pr_id | pr_sbtcode | pr_sdesc | od_quantity | od_amount |
+--------+--------------+----------------+---------------+------------+
| 415 | NP13 | Product 13 | 5 | 125 |
| 1088 | NPAW | Product AW | 4 | 100 |
| 415 | NP13 | Product 13 | 5 | 125 |
| 1088 | NPAW | Product AW | 2 | 50 |
+--------+--------------+----------------+---------------+------------+
What I want to get a result that combines those into 2 lines: 我希望得到的结果将这些结合成两行:
+--------+--------------+----------------+---------------+------------+
| pr_id | pr_sbtcode | pr_sdesc | od_quantity | od_amount |
+--------+--------------+----------------+---------------+------------+
| 415 | NP13 | Product 13 | 10 | 250 |
| 1088 | NPAW | Product AW | 6 | 150 |
+--------+--------------+----------------+---------------+------------+
So I added GROUP BY pr_id to the end of the query: 所以我在查询结尾处添加了GROUP BY pr_id:
SELECT pr_id,
pr_sbtcode,
pr_sdesc,
od_quantity,
od_amount
FROM (
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `bgOrderMain`
INNER JOIN `bgOrderData`
INNER JOIN `bgProducts`
WHERE `bgOrderMain`.`or_id` = `bgOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
UNION
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `npOrderMain`
INNER JOIN `npOrderData`
INNER JOIN `bgProducts`
WHERE `npOrderMain`.`or_id` = `npOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
) TEMPTABLE3
GROUP BY pr_id;
But that just gives me this: 但这只是给了我这个:
+--------+--------------+----------------+---------------+------------+
| pr_id | pr_sbtcode | pr_sdesc | od_quantity | od_amount |
+--------+--------------+----------------+---------------+------------+
| 415 | NP13 | Product 13 | 5 | 125 |
| 1088 | NPAW | Product AW | 4 | 100 |
+--------+--------------+----------------+---------------+------------+
What am I missing here?? 我在这里失踪了什么?
your code is hard to format since you have added nbsp
. 您的代码很难格式化,因为您已经添加了nbsp
。 but any way try this one, 但无论如何尝试这个,
first attemp 第一次尝试
SELECT pr_id,
pr_sbtcode,
pr_sdesc,
SUM(od_quantity) totalQuantity,
SUM(od_amount) totalAmount
FROM
(
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `bgOrderMain`
INNER JOIN `bgOrderData`
INNER JOIN `bgProducts`
WHERE `bgOrderMain`.`or_id` = `bgOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
UNION
SELECT `bgProducts`.`pr_id`,
`bgProducts`.`pr_sbtcode`,
`bgProducts`.`pr_sdesc`,
SUM(`od_quantity`) AS `od_quantity`,
SUM(`od_amount`) AS `od_amount`,
MIN(UNIX_TIMESTAMP(`or_date`)) AS `or_date`
FROM `npOrderMain`
INNER JOIN `npOrderData`
INNER JOIN `bgProducts`
WHERE `npOrderMain`.`or_id` = `npOrderData`.`or_id`
AND `od_pr` = `pr_id`
AND UNIX_TIMESTAMP(`or_date`) >= '1262322000'
AND UNIX_TIMESTAMP(`or_date`) <= '1346990399'
AND (
`pr_id` = '415'
OR `pr_id` = '1088'
)
GROUP BY `bgProducts`.`pr_id`
) unionedTable
GROUP BY pr_id,
pr_sbtcode,
pr_sdesc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.