我有一个表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
答案 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")