mysql - 对两个表的复杂查询

标签 mysql sql join

我有两个表:

table1:
id
--
1
2
3

table2: (left out primary index)
id2 | cond
----------
3   | 1
3   | 0
2   | 1
2   | 1
2   | 0

我需要构造一个隐式计算此中间表的查询:

temp:
id | c1 | c2
------------
1  | 0  | 2
2  | 2  | 2
3  | 1  | 2

c1 = countRows(id2 == id && cone == 1)c2 == countRows(id2 = 2 && cond == 1) .

然后选择 SELECT id FROM temp ORDER BY ABS(c1 - c2)*RAND() .

我目前的尝试是这样的:

SELECT id, COUNT(t1.id2) AS c1, COUNT(t2.id2) AS c2
FROM table1 LEFT JOIN (table2 AS t1) ON id=t1.id2 LEFT JOIN (table2 AS t2) ON t2.id2=2
WHERE t1.cond=1 AND t2.cond=1
GROUP BY t1.id2
ORDER BY ABS(c1 - c2)*RAND()
LIMIT 1

其中有多个问题:

  1. 它不会选择表 2 中没有条目的行
  2. 计算不正确
  3. ORDER BY 第 3 部分中的组列 (c1, c2) 似乎有问题。

帮助将不胜感激。


更新:

  • table1代表玩家,例如
  • table2 将进行几轮比赛,cond 表示获胜
  • c1代表每个玩家赢得的回合数
  • c2 代表引用玩家(在本例中为玩家 2)赢得的回合数

最佳答案

SELECT t1.id, SUM(IFNULL(t2.cond, 0) = 1) AS c1, (SELECT SUM(cond = 1) FROM table2 WHERE id2 = 2) AS c2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id2
GROUP BY t1.id
ORDER BY ABS(SUM(IFNULL(t2.cond, 0) = 1) - c2) * RAND();

关于mysql - 对两个表的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111836/

相关文章:

php - PDO 中的 ST_GeomFromText 返回错误 (php)

php - 奇怪的意外 '$dbname' (T_VARIABLE)

mysql - 将 2 列同一个表与另一列连接起来

MySQL:无法创建表(错误号:150)

sql - 未显示所有左表值的左连接

java - 立即更新到 Java 中的 JCombobox

php - Magento - 产品价格指数处理错误

sql - 如何在 SQL Server 中使用 GROUP BY 连接字符串?

mysql - 使用 mysql 查询计算 "trash bin"中的所有项目

sql - Hive SQL多个左外部联接查询在其结果中缺少记录