在mysql中一起查询where,having和order

时间:2013-08-19 19:30:27

标签: mysql sql group-by

我有下表...

        ID      awaiting    approve decline      
        100       1         0         0     
        100       1         0         0     
        102       1         0         0     
        103       0         1         0     
        104       0         1         0     
        104       1         0         0     
        106       1         0         0     
        107       0         1         0     
        107       1         0         0     
        107       1         0         0

我还有以下代码,......

  SELECT COUNT(*) total
    FROM
    (
    SELECT ID
    FROM table1
    GROUP BY ID
    HAVING COUNT(*) = 2
    AND MAX(awaiting = 1) > 0
    ) q

以上代码的作用是统计所有重复两次的ID,并且至少有一个ID awaititng = 1,

但是现在我想要的是,如果等待的是1,我想用上面列出的重复ID列出上述结果。(如ID 100)。

从上面的查询中,结果是两(2)个ID 100和104,因为我们按ID分组。

现在,我怎么能显示这个等待= 1的ID的所有结果,即使ID是相同的(在这种情况下我们必须有三个行列表)?

请帮助....

2 个答案:

答案 0 :(得分:2)

这应该有效:

SELECT *
FROM table1 
WHERE ID IN (SELECT ID
             FROM table1
             GROUP BY ID
             HAVING COUNT(*) = 2
             AND MAX(awaiting) = 1)
AND awaiting = 1

结果是:

╔═════╦══════════╦═════════╦═════════╗
║ ID  ║ AWAITING ║ APPROVE ║ DECLINE ║
╠═════╬══════════╬═════════╬═════════╣
║ 100 ║        1 ║       0 ║       0 ║
║ 100 ║        1 ║       0 ║       0 ║
║ 104 ║        1 ║       0 ║       0 ║
╚═════╩══════════╩═════════╩═════════╝

Ande here is一个带演示的方形小说。

答案 1 :(得分:1)

如果我正确理解了这个问题,你可以获得这样的各行:

SELECT Table1.ID, Table1.Awaiting, Table1.Approve, Table1.Decline
FROM Table1
INNER JOIN (
  SELECT ID
  FROM table1
  GROUP BY ID
  HAVING COUNT(*) = 2
  AND MAX(awaiting = 1) > 0
) q ON Table1.ID = q.ID

请注意原始查询在这里是如何逐字使用的,因为它会返回您想要的所有ID值。 ID列表将连接回原始表以获取各行。