2016-11-23 68 views
-1

結果刪除重複我具有低於使用MySQL和PHP

SELECT A.order_no, A.order_date, 
COUNT(B.reaction_no) as tot_reaction_no, 
SUM(CASE 
WHEN (B.purification != '') THEN 1 
ELSE 0 
END) as tot_purification 
FROM order_header A 
LEFT JOIN order_reactions B ON A.order_no = B.order_no 
WHERE A.order_date BETWEEN '2015-10-01 00:00:00' AND '2016-09-01 00:00:00' 
AND A.order_no = '23746' 
GROUP BY A.order_no 

一個查詢給定的,這將結果示於圖片。但結果是錯誤的,因爲一些條目是重複的。所以我必須刪除重複並打印計數。計數需要的是「列」的計數從表1

enter image description here

+0

也許您可以在查詢中使用distinct關鍵字 – DBX12

+2

[MySQL:僅選擇列中的唯一值](http:// stackoverflow。 com/questions/8571902/mysql-select-only-unique-values-from-a-column) –

+0

當我使用DISTINCT –

回答

0

我建議查詢

SELECT COUNT(DISTINCT clone_name) AS tot_purification, COUNT(*) AS tot_reaction_no FROM Table2 WHERE `purification`='Column' AND `order_no`=23746; 

在報價請原諒的錯誤,MySQL是很混亂的,當涉及到報價海事組織。

編輯:

添加tot_purification

我不知道你是爲tot_reaction_no期待什麼,所以我只算其中訂單和純化的比賽在我的WHERE子句中描述的所有行。

1

我認爲你需要在你的選擇中省略A.order_date,或者你應該把它添加到group by子句中。這給你一個不同的結果。

你也可以在你的select子句中使用子查詢:

SELECT A.order_no, A.order_date, COUNT(B.reaction_no) as tot_reaction_no, (SELECT count(*) FROM order_reactions as or WHERE or.order_no=A.order_no AND purification!='') as tot_purification, (SELECT count(*) FROM order_reactions as or2 WHERE or.order_no=A.order_no) as tot_reaction_no FROM order_header A WHERE A.order_date BETWEEN '2015-10-01 00:00:00' AND '2016-09-01 00:00:00' AND A.order_no = '23746'

這只是從我的頭頂,因爲您的畫面沒有顯示完整的表,我不知道這是100%是正確的,但它可能會讓你指向正確的方向。

+0

似乎是一個很好的解決方案,肯定會有優化的空間,但弗蘭克是對的。在不知道完整的表格結構的情況下,不可能建立一個「無法理解」的最佳查詢。 – DBX12

0

它,因爲你只在A.order_no分組,使下面的查詢中的變化和再試一次:

將行:

GROUP BY A.order_no; 

GROUP BY A.order_no, A.clone_name;