php - 列中值的 MySQL 计数

标签 php mysql

我有一个列 package 并包含包 ID 1, 2, 3, 4。现在我的查询将选择所有表 stores_profilestores_fee 并按 date 过滤并按 month

下面是我的数据库:

表:stores_profile

enter image description here

表:stores_fee

enter image description here

这是我当前的查询:

<?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 ?>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
<?php } echo '</table>'; ?>

这段代码的结果是:

enter image description here

那么,如何计算 package 列中的包 id,然后按月分组并根据包 id 获得总数,我知道这有点令人困惑,但结果应该如下所示:

enter image description here

最佳答案

您可以尝试使用 SUMCASE:

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/

相关文章:

php - 如何使用 WooCommerce 检索 cart_item_data?

php - SQL-如何通过增加计数循环来选择订单

php - Mysql PDO 执行总是返回TRUE

mysql 创建多个选择以将 max 放入所有行

php - include()d div 不从父级获取宽度和高度

php - 使用 php 和 mysql 对 mysql 数据库进行高级排序和搜索

php - PHP 中的 ISO-8601 周编号与 "Outlook"编号

php - 如何使用 ffmpeg/php 在按钮单击时将 mp4 文件转换为 mp3?

php - 如何删除整数的最后一位? (PHP)

mysql - 在 OSX 上安装 MySQL 在端口 3307 上运行