mysql select count union

大憨熊 提交于 2019-12-23 21:05:54

问题


I have something like this:

(SELECT COUNT(*) AS total FROM `transactions` WHERE 
   `asset`='u_{$user_id}' GROUP BY id)
 UNION DISTINCT 
(SELECT COUNT(*) AS total FROM transactions tr 
   INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id) 
   WHERE pa.user_id = '{$user_id}' 
   GROUP BY tr.id)

It gives 1

Now works like this:

SELECT
 (SELECT COUNT(*) FROM `transactions` 
    WHERE `asset`='u_{$user_id}')
  + 
 (SELECT COUNT(*) FROM transactions tr 
    INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id) 
    WHERE pa.user_id = '{$user_id}')

It gives 6

But i need to get 5.., sow how to make a right query?

Sure, i can do this by php, but..HOW by sql..?

Really "and" and "or" conditions does not matter, they works correctly, the problem is in counting UNION`ed query. The second query correctly counts summ (1+5), but values ​​intersect queries. The first one gives result of just first subquery. So, i need to unique results before count...

In php, it should look like that: i get transactions id list by inner join with payments, than construct a long query in a loop, to get something like SELECT COUNT(*) FROM transactions WHERE (*what i have now* OR id=$id_1 OR id=$id_2 OR id=$id_3 etc..)

UPD: cutted

RESOLVED!=)

SELECT COUNT(*) FROM(
SELECT tr.* FROM transactions tr 
WHERE tr.asset='u_{$user_id}' OR (tr.liability='g' AND tr.l_info='{$user_name}')
UNION SELECT tr.* FROM transactions tr 
INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id) 
WHERE pa.user_id = '{$user_id}' AND pa.status='100') 
AS total

AS total is importantly!


回答1:


I gone through your question, and i think you want to fetch the maximum from the union clause, well i am not aware of the mySql, so i have solved your question in MS-SQL.

Logic:- I have used CTE, and afterwards performed UNION operation and then i have selected MAXIMUM from the two.

WITH COUNTT AS (SELECT 1 AS TEST
UNION 
SELECT 5 AS TEST)
SELECT MAX(TEST) FROM COUNTT

And, in place of hardcoded "1" and "5", you can use your count query, i think it is what you are looking for. And, please mark it as an answer.



来源:https://stackoverflow.com/questions/11943748/mysql-select-count-union

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!