簡體   English   中英

結合兩個表並求和mysql

[英]combine two tables and sum mysql

我想加入兩個表,但我不能這樣做,因為我想對列求和並獲得兩個日期之間的結果

第一個表名為:vip_allotment_details

allotment_id    qty
2                3
2                5
1                2
1                4

第二個表名稱:vip_allotment

id   date_from  date_to
1    2017-10-1  2017-10-5
2    2017-10-6  2017-10-10

我想從查詢中得到什么給我這個結果

id    qty  date_from   date_to
1      6   2017-10-1   2017-10-5
2      8   2017-10-6   2017-10-10

我將解釋結果:

第一個allotment_id字段與第二個表中的id字段鏈接,我想要的結果是我們可以通過date_from和date_to之間的兩個字段(id,allotment_id)進行數量的總和

這是我的嘗試:

$query1 = "
SELECT SUM(qyt) as total
   FROM vip_allotment_details 
 where allotment_id IN ( SELECT id from vip_allotment where date_from >= '$date_1' AND date_to <= '$date_2') 
";

在我的查詢結果不帶過濾器的情況下獲取所有數量字段的總和。

我希望我已經很好地解釋了我的問題。

謝謝/。

我還沒有嘗試,但是也許您可以這樣嘗試:

SELECT a.id AS id, SUM(qyt) AS qty, date_from, date_to
FROM vip_allotment AS a
LEFT JOIN vip_allotment_details AS b on b.allotment_id = a.id
WHERE a.date_from >= '{thedatestart}' AND a.date_to <= '{thedateend}'
GROUP BY a.id
ORDER BY a.id ASC;

試試這個..更改您的表名並運行查詢..希望它可以按您的要求給出結果..如果不讓我知道...

select a.id
     , sum(b.qty)
     , a.date_from
     , a.date_to 
  from table1 a
     , table2 b 
 where a.id = b.allotment_id 
 group 
    by b.allotment_id

您需要使用JOIN 我看到您使用的是IN關鍵字,該關鍵字無效。 有很多方法可以解決您的問題。 其中之一是

select allotment_id, qty, date_from, date_to
from 
(select allotment_id, SUM(qty) as qty 
   from vip_allotment_details group by allotment_id
) at
INNER JOIN 
vip_allotment va 
ON va.id= at.allotment_id;

如果您想要一個以上的結果,則需要一個聚合函數(SUM,COUNT,AVG等),您需要使用GROUP BY。 您的查詢並不難,這應該可以解決問題:

SELECT va.id, va.date_from, va.date_to, SUM(vad.qyt) AS qyt
FROM vip_allotment AS va
LEFT JOIN vip_allotment_details AS vad ON vad.allotment_id = va.id
GROUP BY va.id

正如您在此處看到的那樣,這將產生預期的結果: http : //sqlfiddle.com/#!9/707a8/2

如果現在要開始添加額外的過濾器(例如按日期過濾),只需在查詢中添加WHERE即可。 像這樣:

...
LEFT JOIN ...
WHERE va.date_from >= "2017-10-06" and va.date_to <= "2018-10-06"
GROUP BY ...

http://sqlfiddle.com/#!9/707a8/6

附帶一提,我注意到您沒有在代碼的php部分中綁定參數。 請注意,這可能會帶來嚴重的安全問題,尤其是當這些日期直接來自用戶輸入時。 我建議查看PDO以在PHP中進行實際查詢。

我認為以下應滿足您的要求。

SELECT 
    va.id,
    SUM(vad.qyt) AS total,
    va.date_from,
    va.date_to
FROM vip_allotment_details AS vad 
LEFT JOIN vip_allotment AS va ON va.id = vad.allotment_id
GROUP BY vad.allotment_id

請嘗試以下。我認為您會得到理想的結果。

select va.id, temp.qty , va.date_from,va.date_to from vip_allotment as va
inner join (select sum(qty) as qty , allotment_id from vip_allotment_details group by `allotment_id`) as temp
ON temp.allotment_id=va.id 
where va.date_from >= '$date_1' AND va.date_to <= '$date_2';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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