Select 比较 SQL 中的其他 2 列时来自列的 ID
Select an ID from a column when comparing 2 other columns in SQL
我有一个包含 ID
、Valid
和 Time
列的 table,其中包含每个 ID 的每次访问的发生日志。
从那以后,我用 ID
、Valid
和 Count
用这个命令做了这个 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 的 1
和 2
。
我正在考虑以某种方式使用这个新的 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 BY
和 HAVING
子句实现此目的。
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
我有一个包含 ID
、Valid
和 Time
列的 table,其中包含每个 ID 的每次访问的发生日志。
从那以后,我用 ID
、Valid
和 Count
用这个命令做了这个 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 的 1
和 2
。
我正在考虑以某种方式使用这个新的 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 BY
和 HAVING
子句实现此目的。
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