我有两张桌子
Table devolucion
detalle_ticket_ticket_id fecha
20 2013-06-04
21 2013-06-04
23 2013-06-04
23 2013-06-04
23 2013-06-04
24 2013-06-04
24 2013-06-04
24 2013-06-04
Table detalle_ticket
ticket_id precio iva cantidad
20 7.25 0 7.25
21 20 0 20
23 12 0 12
23 13 0 13
23 14 0 14
24 48.40 16 48.40
24 18.50 16 18.50
24 4.70 0 4.70
我想要做的是将列precio,iva,cantidad中的值相加,其中列ticket_id的值是相同的,我会更好地解释:
列ticket_id中的第一行是20,第二行是21,第三行是23,第四行是23所以第三行和第四行具有相同的值(23)然后我需要的是将各自的值相加从列precio(值12 + 13 = 25),iva(0 + 0 = 0),cantidad(12 + 13 = 25)等整个行,问题来自我的查询,这不是我的工作预期。它让我感到困惑。
到目前为止我尝试了什么
SELECT dt.ticket_id, SUM(dt.precio), SUM(iva), SUM(cantidad)
FROM devolucion d INNER JOIN detalle_ticket dt
ON d.detalle_ticket_ticket_id = dt.ticket_id
WHERE DATE(d.fecha) = '2013-06-04'
GROUP BY dt.ticket_id;
我的(错误)查询抛出的内容:
ticket_id precio iva cantidad
20 7.25 0 7.25
21 20 0 20
23 117 0 12
24 214.80 16 48.40
我的期望:
ticket_id precio iva cantidad
20 7.25 0 7.25
21 20 0 20
23 39 0 39
24 71.6 32 71.6
我已经在sqlfiddle http://www.sqlfiddle.com/#!2/64367
中创建了它提前谢谢。
答案 0 :(得分:2)
您可以使用子查询获取sum
表中每列的detalle_ticket
,然后您将该子查询加入devolucion
表。由于每个表中有多行,而您只加入ticket_id
,因此可以使用以下内容:
SELECT distinct d.detalle_ticket_ticket_id,
dt.precio,
dt.iva,
dt.cantidad
FROM devolucion d
INNER JOIN
(
select ticket_id,
sum(precio) precio,
sum(iva) iva,
sum(cantidad) cantidad
from detalle_ticket
group by ticket_id
) dt
ON d.detalle_ticket_ticket_id = dt.ticket_id
WHERE DATE(d.fecha) = '2013-06-04';
见SQL Fiddle with Demo。这给出了一个结果:
| DETALLE_TICKET_TICKET_ID | PRECIO | IVA | cantidad |
-----------------------------------------------------
| 20 | 7.25 | 0 | 7.25 |
| 21 | 20 | 0 | 20 |
| 23 | 39 | 0 | 39 |
| 24 | 71.6 | 32 | 71.6 |
答案 1 :(得分:1)
问题是两个表中的给定日期都有多行。第一个表中的id 24有3个日期,第二个表中有3个日期。结果连接有9行,每个组合一个。
要解决此问题,请在加入之前进行聚合:
SELECT dt.ticket_id, SUM(dt.precio), iva, total
FROM devolucion d INNER JOIN
(select dt_ticket_id, sum(dt.precio) as precio, sum(dt.iva) as iva, sum(total) as total
from detalle_ticket dt
group by dt_ticket_id
) dt
ON d.detalle_ticket_ticket_id = dt.ticket_id
WHERE DATE(d.fecha) = '2013-06-04'
我还添加了iva
和total
的聚合。他们似乎失踪了。