使用MySQL计数/分组

时间:2013-05-25 03:14:09

标签: php mysql sql select

是否可以仅使用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解决方案?

3 个答案:

答案 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周围添加反引号,因为我认为它是一个保留字。

SQL Fiddle Demo