![](/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.