2

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

4

3 回答 3

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
于 2013-05-25T03:24:14.890 回答
2
Select * From table
Where `group` in 
     (Select `group` from table 
      group by `group`
      having count(*) < 3)
于 2013-05-25T03:30:29.217 回答
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 小提琴演示

于 2013-05-25T03:17:32.827 回答