MySQL - 计算具有相等值的行,但仅当名称出现在其他列中时才计算

时间:2016-12-29 14:38:49

标签: mysql sql select count

我有一个表JT,其中包含以下列:

Id  |  Name |  Date     
1   |  John |  2015-01-01
2   |  Alex |  2016-01-01
3   |  Pete |  2016-01-01
4   |  Alex |  2016-08-08    
5   |  John |  2016-08-08

我想计算具有相同日期的行数。我这样做了:

$query_21="SELECT Date, COUNT(*) AS total FROM JT GROUP BY Date";
$result_21=mysql_query($query_21);

while($row = mysql_fetch_array($result_21)) {

    echo $row['Date'] . ":";
    echo $row['total'] . "<br>";     
}

返回工作正常:

2015-01-01: 1

2016-01-01: 2

2016-08-08: 2

但是,我有一个变量$ Name,我想进行调用,因此只有在计数期间其中一行包含$ Name时,才会在结果数组中插入一行。所以如果$ Name =“John”它应该返回:

2015-01-01: 1

2016-08-08: 2

2 个答案:

答案 0 :(得分:1)

这可以使用0.02027 14:59:08.000090 0.01549 14:59:08.000090 0.00559 14:59:08.000090 -0.00760 14:59:08.000090 -0.02439 14:59:08.000090 条件使用where条件来完成,但是既然您要进行分组,我认为使用exists子句可能更优雅:< / p>

having

注意:
当然,SELECT Date, COUNT(*) AS total FROM jt GROUP BY Date HAVING (COUNT(CASE name WHEN $name THEN name END) > 0) 应该是预备陈述中的约束变量。

答案 1 :(得分:0)

它也可以使用Mureinik查询和SUM,而不使用COUNT和CASE语句。 我认为这个查询更容易阅读和理解,因为查询更紧凑。

SELECT 
   total.Date
 , COUNT(*) AS total
FROM 
  total 
GROUP BY
  total.Date
HAVING 
  SUM(total.Name = "John")