Select 比较 SQL 中的其他 2 列时来自列的 ID

Select an ID from a column when comparing 2 other columns in SQL

我有一个包含 IDValidTime 列的 table,其中包含每个 ID 的每次访问的发生日志。 从那以后,我用 IDValidCount 用这个命令做了这个 table:

select ID,Valid, count(Valid) as Count from table1 group by ID,VALID order by ID;

 ID    | Valid  |    Count   |
  1    |    0   |     5      |  
  2    |    1   |     3      | 
  2    |    0   |     8      |
  3    |    1   |     4      |  
  3    |    0   |     2      | 
  4    |    1   |     6      |

这个table表示进行了多少次有效访问和无效访问,例如ID 2进行了3次有效访问和8次无效访问。

我的目标是获得 0 有效计数多于 1 的 ID。 在此示例中,它将是 ID 的 12

我正在考虑以某种方式使用这个新的 table,但我无法理解如何将 Count 列中的值与 0 和 [=22] 进行比较=]s.

如果没有 table,也许还有其他更简单的方法,所以这是原始 table1 的样子

 ID    | Valid  |      Time                   |
  1    |    0   |     2012-06-28 00:00:00     |  
  4    |    1   |     2012-01-20 00:00:00     | 
  1    |    0   |     2012-08-19 00:00:00     |
  2    |    1   |     2012-07-02 00:00:00     |  
  4    |    1   |     2012-05-28 00:00:00     | 
  3    |    0   |     2012-02-07 00:00:00     | 
  ....

您可以使用 GROUP BYHAVING 子句实现此目的。

SELECT ID
FROM LOG1
GROUP BY ID
HAVING SUM(CASE VALID WHEN 0 THEN 1 ELSE 0 END) > SUM(CASE VALID WHEN 1 THEN 1 ELSE 0 END)

您可以仅按 ID 分组并同时计算计数 - Valid=0 的计数和 Valid=1 的计数:

SELECT t.ID
FROM (
    SELECT 
        ID, 
        COUNT(CASE WHEN Valid = 0 THEN 1 ELSE 0 END) as CountValid0,
        COUNT(CASE WHEN Valid = 1 THEN 1 ELSE 0 END) as CountValid1
    FROM table1 
    GROUP BY ID
) t
WHERE t.CountValid0 > t.CountValid0