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