2016-03-05 3 views
0

Это работает:Объединение сложных MySQL запросов из той же таблицы

SELECT * 
FROM (SELECT 
SUM(count) AS valid, 
SUBSTRING_INDEX(REPLACE(REPLACE(REPLACE(ref_url,'http://',''),'https://',''),'www.',''),'/',1) AS sDomain 
FROM ref_records 
WHERE user_id = 9507 
GROUP BY sDomain 
ORDER BY 1 DESC) 
as A 

INNER JOIN 

(SELECT 
SUM(invalid) AS invalid, 
SUBSTRING_INDEX(REPLACE(REPLACE(REPLACE(ref_url,'http://',''),'https://',''),'www.',''),'/',1) AS sDomain 
FROM ref_records 
WHERE user_id = 9507 
GROUP BY sDomain 
ORDER BY 1 DESC) 
as B 


on A.sDomain=B.sDomain 

Однако он выводит следующую таблицу:

Теперь я хотел бы те же результаты, которые будут объединены следующим образом:

sDomain | valid | invalid 

Любые идеи? Благодарю.

+0

Пробовал с союзом, но только подытожил результат двух запросов суммы ... не то, что я хотел – Ivan

ответ

2

Вы можете просто выбрать уникальные элементы и сумму другого элемента в своем выборе, а затем использовать групповой оператор.

проверить следующее утверждение:

select A.sDomain ,sum(valid) as valid, sum(invalid) 
from A INNER JOIN B ON A.sDomain=B.sDomain 
group By A.sDomain 
+0

я не знаю, как применить это на мой запрос так как сумма сложна, как вы можете видеть в примере. – Ivan

+0

вы просто замените. {SELECT * FROM } с {ВЫБРАТЬ A.sDomain, действительный, недействительный ОТ } в запросе, и вы получите результат, который вы хотите. – Hamid

+0

Удивительный, это и трюк! Спасибо чувак! +1 – Ivan

Смежные вопросы