我有一个列 package
并包含包 ID 1, 2, 3, 4
。现在我的查询将选择所有表 stores_profile
和 stores_fee
并按 date 过滤并按 month
下面是我的数据库:
表:stores_profile
表:stores_fee
这是我当前的查询:
<?php
$filter_date = '2013-04-01';
$result = mysql_query("SELECT sp.*, sf.*, sp.id as store_profile_id,DATE_FORMAT(sf.date_start, '%d-%m-%Y') as month
FROM `stores_profile` sp
left join `stores_fee` sf ON sp.id=sf.store_id
where sf.date_start >= '".$filter_date."' GROUP BY MONTH(sf.date_start) ");
while($row = mysql_fetch_array($result)) {
$month = date('M', strtotime($row['month']));
$package = $row['package'];
?>
<tr>
<td><?php echo $month ?> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<?php } echo '</table>'; ?>
这段代码的结果是:
那么,如何计算 package
列中的包 id,然后按月分组并根据包 id 获得总数,我知道这有点令人困惑,但结果应该如下所示:
最佳答案
您可以尝试使用 SUM
和 CASE
:
SELECT DATE_FORMAT(sf.date_start, '%d-%m-%Y') as `Month`,
SUM(CASE WHEN sf.package = 1 THEN 1 ELSE 0 END) AS `Package 1`,
SUM(CASE WHEN sf.package = 2 THEN 1 ELSE 0 END) AS `Package 2`,
SUM(CASE WHEN sf.package = 3 THEN 1 ELSE 0 END) AS `Package 3`,
SUM(CASE WHEN sf.package = 4 THEN 1 ELSE 0 END) AS `Package 4`
FROM `stores_profile` sp
LEFT JOIN `stores_fee` sf ON sp.id = sf.store_id
WHERE sf.date_start >= '".$filter_date."' GROUP BY MONTH(sf.date_start)
我能想到的另一种方法是对其进行子查询。
关于php - 列中值的 MySQL 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038295/