mysql选择计数联合

时间:2012-08-13 23:35:48

标签: mysql select count union

我有这样的事情:

(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)

它提供1

现在的工作原理如下:

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}')

它提供6

但我需要获得5 ..,播种如何进行正确的查询?

当然,我可以通过php做到这一点,但是......如何通过sql ...?

真的“和”和“或”条件没关系,它们正常工作,问题在于计算UNION的查询。第二个查询正确计算summ(1 + 5),但值与查询相交。第一个给出第一个子查询的结果。所以,我需要在计算之前获得独特的结果......

在php中,它看起来应该是这样的:我通过内部联接和付款获得交易ID列表,而不是在循环中构造一个长查询,以获得类似SELECT COUNT(*) FROM transactions WHERE (*what i have now* OR id=$id_1 OR id=$id_2 OR id=$id_3 etc..)

的内容

UPD:cutted

解决! =)

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

总计非常重要!

1 个答案:

答案 0 :(得分:0)

我经历了你的问题,我想你想从union子句中获取最大值,我不知道mySql,所以我在MS-SQL中解决了你的问题。

逻辑: - 我使用过CTE,然后执行了UNION操作,然后我从两个中选择了MAXIMUM。

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

并且,代替硬编码的“1”和“5”,您可以使用计数查询,我认为这是您正在寻找的。并且,请将其标记为答案。