簡體   English   中英

表中的 Select 行,其中 id 等於另一個表中的另一個 id,並對結果列中的值求和

[英]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))

我建議JOINGROUP 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM