获取SQL中特定列的值较少的行

时间:2018-02-14 19:54:58

标签: mysql sql

使用以下SQL查询,

SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID) 
    FROM Problem 
    WHERE Problem.Solver_Assigned_ID IN (
        SELECT Specialist_Category.Specialist_ID 
        FROM Specialist_Category, Specialist_Category_Name
        WHERE Specialist_Category.Category_ID  = Specialist_Category_Name.Specialist_Category_ID 
        AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
    GROUP BY Problem.Solver_Assigned_ID

我正在拿桌子

+-----------------+-----------------------------------+
| Solver assigned | COUNT(Problem.Solver_Assigned_ID) |
+-----------------+-----------------------------------+
| 12              | 2                                 |
+-----------------+-----------------------------------+
| 17              | 3                                 |
+-----------------+-----------------------------------+
| 20              | 2                                 |
+-----------------+-----------------------------------+

我想获得具有最小COUNT(Problem.Solver_Assigned_ID)值的表。

我试过了

SELECT (Problem.Solver_Assigned_ID, MIN(COUNT(Problem.Solver_Assigned_ID)))
FROM (
    SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID) 
        FROM Problem 
        WHERE Problem.Solver_Assigned_ID IN (
            SELECT Specialist_Category.Specialist_ID 
            FROM Specialist_Category, Specialist_Category_Name
            WHERE Specialist_Category.Category_ID  = Specialist_Category_Name.Specialist_Category_ID 
            AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
        GROUP BY Problem.Solver_Assigned_ID
)

预期结果是

+-----------------+-----------------------------------+
| Solver assigned | COUNT(Problem.Solver_Assigned_ID) |
+-----------------+-----------------------------------+
| 12              | 2                                 |
+-----------------+-----------------------------------+
| 20              | 2                                 |
+-----------------+-----------------------------------+

但无济于事。任何帮助,将不胜感激。感谢

2 个答案:

答案 0 :(得分:3)

您可以根据子选择的最小值

过滤结果
SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID) 
FROM Problem 
WHERE Problem.Solver_Assigned_ID IN (
    SELECT Specialist_Category.Specialist_ID 
    FROM Specialist_Category, Specialist_Category_Name
    WHERE Specialist_Category.Category_ID  = Specialist_Category_Name.Specialist_Category_ID 
    AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
GROUP BY Problem.Solver_Assigned_ID
having COUNT(Problem.Solver_Assigned_ID)  = (select min(my_count ) 
      from (
      SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID)  as my_count
          FROM Problem 
          WHERE Problem.Solver_Assigned_ID IN (
              SELECT Specialist_Category.Specialist_ID 
              FROM Specialist_Category, Specialist_Category_Name
              WHERE Specialist_Category.Category_ID  = Specialist_Category_Name.Specialist_Category_ID 
              AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
          GROUP BY Problem.Solver_Assigned_ID )  t1)

答案 1 :(得分:1)

您必须使用您尝试的两个查询进行内部联接,如下所示:

SELECT A.* FROM
(SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID) 
FROM Problem 
WHERE Problem.Solver_Assigned_ID IN (
    SELECT Specialist_Category.Specialist_ID 
    FROM Specialist_Category, Specialist_Category_Name
    WHERE Specialist_Category.Category_ID  = Specialist_Category_Name.Specialist_Category_ID 
    AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
GROUP BY Problem.Solver_Assigned_ID) A
INNER JOIN 
(SELECT (C.Solver_Assigned_ID, MIN(C.countValue))
 FROM (
 SELECT Problem.Solver_Assigned_ID, COUNT(Problem.Solver_Assigned_ID) countValue
    FROM Problem 
    WHERE Problem.Solver_Assigned_ID IN (
        SELECT Specialist_Category.Specialist_ID 
        FROM Specialist_Category, Specialist_Category_Name
        WHERE Specialist_Category.Category_ID  =    
        Specialist_Category_Name.Specialist_Category_ID 
        AND Specialist_Category_Name.Specialist_Category_Name = "Mouse") 
        GROUP BY Problem.Solver_Assigned_ID
) C GROUP BY C.Solver_Assigned_ID) B
ON A.Solver_Assigned_ID=B.Solver_Assigned_ID;