首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql选择计数联合

问mysql选择计数联合
EN

Stack Overflow用户
提问于 2012-08-13 23:35:47
回答 1查看 5.7K关注 0票数 3

我有这样的事情:

代码语言:javascript
复制
(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

现在是这样工作的:

代码语言:javascript
复制
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.实现but..HOW?

“和”和“或”条件并不重要,它们正确工作,问题是在计算UNION`ed‘in查询时。第二个查询正确计数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:切断

解决了!=)

代码语言:javascript
复制
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

作为总是非常重要的!

EN

回答 1

Stack Overflow用户

发布于 2014-01-03 05:06:16

我看过了你的问题,我想你想从union条款中得到最高值,我不知道mySql,所以我用mySql解决了你的问题。

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

代码语言:javascript
复制
WITH COUNTT AS (SELECT 1 AS TEST
UNION 
SELECT 5 AS TEST)
SELECT MAX(TEST) FROM COUNTT

而且,代替硬编码的"1“和"5",你可以使用你的计数查询,我认为这是你想要的。请把它标记为答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11943748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档