mysql 选择计数联合

标签 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..?

实际上“and”和“or”条件并不重要,它们可以正常工作,问题在于计算 UNION 查询。第二个查询正确计算了 summ(1+5),但值与查询相交。第一个只给出第一个子查询的结果。所以,我需要在计算之前得到唯一的结果......

在 php 中,它应该是这样的:我通过内部连接和付款获取交易 ID 列表,而不是在循环中构造一个长查询,以获取类似 SELECT COUNT(*) FROM transactions WHERE (*what我现在有* OR id=$id_1 OR id=$id_2 OR id=$id_3 等等。)

UPD:削减

已解决!=)

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 很重要!

最佳答案

我看过你的问题,我想你想从 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”,您可以使用您的计数查询,我认为这就是您要找的。并且,请将其标记为答案。

关于mysql 选择计数联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943748/

相关文章:

java - SQL 请求 - 具有多个空值的 SELECT

带有 SELECT 状态的 SQL INNER JOIN 抛出错误

php - 检查字符串是否至少有 75% 是大写

php - 如何计算 sphinx 的结果?

mysql - SQL:计算一个字段的值

mysql - 需要加载 700 万个文件 - 有什么陷阱吗?

php - "Undefined Index"表单提交后出错

php - 查找 SQL 语法中的错误

c++ - select() 没有获取标准输入

mysql - 检查用户是否匹配相同的选项