如何对MySQL数据库表进行查询?

时间:2014-06-10 16:10:01

标签: mysql sql database

我被赋予了一项任务,将CPU使用率趋势显示为构建过程的一部分,该过程也进行回归测试。

每个单独的测试用例运行在表RegrCaseResult中都有一条记录。 RegrCaseResult表看起来像这样:

id   projectName  ProjectType  returnCode  startTime   endTime           totalMetrics

1    'first'      'someType'   16           'someTime' 'someOtherTime'   222

RegrCaseResult.totalMetrics是一个特殊键,它通过ThreadMetrics.id链接到另一个名为ThreadMetrics的表。

以下是ThreadMetrics的外观:

id   componentType   componentName   cpuTime   linkId

1    'Job Totals'    'Job Totals'    'totalTime' 34223
2    'parser1'       'parser1'       'time1'     null
3    'parser2'       'generator1'    'time2'     null
4    'generator1'    'generator1'    'time3'     null
------------------------------------------------------
5    'Job Totals'    'Jot Totals'    'totalTime' 9899
...

包含compnentName' Job Totals'的行。是RegrCaseResult表中的totalMetrics将链接到的' totalTime'给定某个projectType是我真正想得到的。 ' Job Totals'实际上是其他记录的总和 - 在上面的例子中,是time1到time3的总和。表ThreadMetrics末尾的linkId可以链接回RegrCaseResult.id。

要求还指出我应该有办法强制执行条件,该条件仅包括在特定时期内具有一致返回代码的项目。我的初步问题来自于以下内容:

我创建了以下简单表来展示我想要实现的目标:

id   projectName  returnCode

1    'first'    16
2    'second'   16
3    'third'    8
4    'first'    16
5    'second'   8
6    'first'    16

基本上我想获得所有具有一致returnCode的项目,无论returnCode值是什么。在上面的示例中,我应该只获得一个项目,即#34; first"。我认为这很简单,但在数据库方面我很糟糕。任何帮助都会很棒。

我尽力说清楚。希望我已经实现了目标。

4 个答案:

答案 0 :(得分:5)

这是一个简单的方法:

select projectname
from table t
group by projectname
having min(returncode) = max(returncode);

如果min()max()值相同,则所有值都相同(除非您有NULL个值。)

编辑:

要保持'third',您需要一些其他规则,例如拥有多个返回代码。所以,你可以这样做:

select projectname
from table t
group by projectname
having min(returncode) = max(returncode) and count(*) > 1;

答案 1 :(得分:1)

select projectName from projects  
    group by projectName having count(distinct(returnCode)) = 1)  

这也会返回只有一个条目的项目 你想怎么处理它们?

工作示例http://www.sqlfiddle.com/#!2/e7338/8

答案 2 :(得分:0)

您可以使用Not Exists尝试类似的内容:

Select  Distinct ProjectName
From    Table   A
Where   Not Exists
(
    Select  1
    From    Table   B
    Where   B.ProjectName = A.ProjectName
    And     B.ReturnCode <> A.ReturnCode
)

“我不确定您选择的是什么,因此您可以将Select声明更改为您需要的内容。

答案 3 :(得分:0)

这应该这样做:

SELECT COUNT(ProjectName) AS numCount, ProjectName FROM (
  SELECT ProjectName FROM Foo
  GROUP BY ProjectName, ReturnCode
) AS Inside
GROUP BY Inside.ProjectName
HAVING numCount = 1

它按名称和返回代码对所有ProjectNames进行分组,然后选择那些只列出一个返回代码的项目名称。

SQLFiddle链接:http://sqlfiddle.com/#!2/c52b6/11/0