是否可以仅使用SQL返回属于少于3行的组的所有行,或者是否必须使用某些PHP来获得此结果?
例如,请考虑此表
___________________
| id | group | name |
|:::::::::::::::::::|
| 0 | 1 | bob |
| 1 | 2 | ted |
| 2 | 1 | jack |
| 3 | 3 | lars |
| 4 | 3 | dane |
| 5 | 1 | joe |
| 6 | 2 | kid |
| 7 | 2 | neil |
我想要返回第3行和第4行,因为它们属于一个少于3行的组。
是否只有SQL解决方案?
答案 0 :(得分:3)
你可以试试这个:
SELECT t.`id`, t.`group`, t.`name`, tt.`rows`
FROM `table` t
JOIN (SELECT `group`, COUNT(*) AS rows FROM table GROUP BY `group`) tt
ON tt.`group` = t.`group`
HAVING tt.`rows` < 3
答案 1 :(得分:2)
Select * From table
Where `group` in
(Select `group` from table
group by `group`
having count(*) < 3)
答案 2 :(得分:1)
我认为这样的事情应该适合你加入桌子本身:
SELECT T.Id, T.`Group`, T.Name
FROM YourTable T
JOIN (
SELECT `Group`, COUNT(1) cnt
FROM YourTable
GROUP BY `Group`
) T2 ON T.`Group` = T2.`Group` AND T2.cnt < 3
你需要在列名称Group周围添加反引号,因为我认为它是一个保留字。