![](/img/trans.png)
[英]How to assign to each row a number of times a value appears in the whole table?
[英]How do I select row based on the number of times it appears in the table?
我有我的表:称之为tblA
表有三行, id
, sub-id
和visibility
sub-id
是主键(它为id
定义分类法)。 我正在尝试建立一个查询,该查询选择出现少于三遍的每个id
。
这是查询/结果示例
select * from tbla where id = 188002;
+--------+--------+-------------+
| sub-id | id | visibility |
+--------+--------+-------------+
| 284922 | 188002 | 2 |
| 284923 | 188002 | 2 |
| 284924 | 188002 | 0 |
+--------+--------+-------------+
从我在这里和这里所看到的看来,我需要在...本身上加入表格。 我真的不明白会取得什么成就。
如果有人对此有所了解,我们将不胜感激。 我将继续对其进行研究,并使用我遇到的任何其他信息来更新此主题。
谢谢
SELECT id
FROM tbla
GROUP BY id
HAVING COUNT(*) < 3
如果要从表中选择所有列,则必须在子选择中使用@Joe的查询:
SELECT * FROM tbla a
WHERE a.id IN (SELECT DISTINCT b.id
FROM tbla b
GROUP BY b.id
HAVING COUNT(*) < 3)
此查询首先选择重复项少于3个的所有ID。
不重复项消除重复项,查询的工作原理相同,但略慢一些。
接下来,它选择ID满足子选择中条件(即重复ID少于3个)的所有行。
不能一次性执行此操作的原因是, group by
将具有相同id的所有行一起堆放在一个super-row
(因为缺少更好的metafor) 。
您不能将不在group by子句中的列分开。
外部选择解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.