![](/img/trans.png)
[英]Select rows from a table where row in another table with same id has a particular value in another column
[英]Select rows in a table where id is equals to another id in another table and sum values in column from the result
我这里有一个小情况。 我有 2 个表“facture”和“facturedet”。
我可以让这个查询正常工作:
SELECT *
FROM facturedet
WHERE facture_id IN (SELECT rowid
FROM facture
WHERE CAST(date_valid AS DATE) = current_date)
现在,在上述查询的结果中,我有一列“数量”。
如何求和此列中的值? 我试过了
SELECT SUM(qty)
FROM
(SELECT *
FROM llx_facturedet
WHERE fk_facture IN (SELECT rowid
FROM llx_facture
WHERE CAST(date_valid AS DATE) = current_date))
我建议JOIN
和GROUP BY
:
SELECT SUM(fd.qty)
FROM facturedet fd JOIN
facture f
ON fd.facture_id = f.rowid
WHERE date_valid >= current_date AND
date_valid < current_date INTERVAL '1 DAY';
注意:这使用不等式进行日期比较。 添加一个日期的确切方法因数据库而异。 在大多数数据库中,这种比较结构更适合优化器,这意味着查询速度更快。
这是我使用的最终查询:
Select
COALESCE(SUM(CASE WHEN f.type = 2 THEN -fd.qty ELSE fd.qty END), 0) As qty_sum
From
' . MAIN_DB_PREFIX . 'facturedet fd
Inner Join
' . MAIN_DB_PREFIX . 'facture f On fd.fk_facture = f.rowid
Inner Join
' . MAIN_DB_PREFIX . 'societe_commerciaux sc On sc.fk_soc = f.fk_soc
Inner Join
' . MAIN_DB_PREFIX . 'user u On sc.fk_user = u.rowid
Where
f.$this->typeDate Between $this->startDate And $this->endDate
And
u.rowid = "' . $this->userId . '"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.