【问题标题】:GROUP BY one column and COUNT two columnsGROUP BY 一列和 COUNT 两列
【发布时间】:2019-05-15 16:59:37
【问题描述】:

我需要按供应商 ID 分组并计算尚未售出或失败的数量,但还要计算该供应商的已售数量。

|---vendor id---|---failed---|---sold---|
|    1234       |   FAILED   |          |
|    9876       |   FAILED   |          |
|    1234       |   GRADE A  |   sold   |
|    1234       |   GRADE A  |   sold   |
|    9876       |   GRADE A  |   sold   |

我尝试了无数在堆栈上找到的查询,但我没有任何运气。

$sql = 'SELECT *,sold,COUNT(sold),COUNT(*) FROM wp_drives WHERE sold != "sold" AND grade != "Grade FAIL" GROUP BY vendor_id';
while($row = mysqli_fetch_assoc($result)) {
    echo "<tr>";
    echo "<td style='text-align: center;'>" .$row['vendor_id']. "</td>";
    echo "<td style='text-align: center;'><span class='qty'>".$row['COUNT(*)']."</span></td>";
    echo "<td style='text-align: center;'>" .$row['capacity']. "</td>";
    echo "<td style='text-align: center;'>" .$row['form_factor']. "</td>";
    echo "<td style='text-align: center;'>" .$row['rpm']. "</td>";
    echo "<td style='text-align: center;'><span class='sold'>".$row['COUNT(sold)']."</span></td>";
    echo "</tr>";
}

在我的表格中,我将供应商分组,该组中所有硬盘的数量,然后一些已售出,需要显示该组中已售出多少。现在它只是返回与出售数量相同的价值。

【问题讨论】:

    标签: mysql group-by count


    【解决方案1】:

    当您对数据进行分组时,您不能使用*,您正在分组的列应该是选择标准的一部分。试试这个

    SELECT vendor_id,COUNT(*) as count 
    FROM wp_drives 
    WHERE sold != 'sold' AND grade != 'Grade FAIL' 
    GROUP BY vendor_id
    

    【讨论】:

    • 要查看已售出的数量,请将已售出的!='已售出'更改为已售出='已售出'。我刚刚根据你的准备了上面的查询
    • 我认为这就是问题所在,我不想在剩余数量中显示已售出,而只在已售出的列中显示。
    • 我现在明白你的意思了,因为 WHERE 子句对于 qty 和已售出是不同的,所以您不能通过 VendorId 获取 qty 并通过 vendorId 一起出售 qty。对于 qty,WHERE 子句是 sold != 'sold',而对于 'sold',WHERE 子句是 sold = 'sold',两者完全不同
    • 是的,嗯。那我可能需要做多个查询,是吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2020-12-20
    • 2012-12-28
    • 1970-01-01
    • 2021-10-07
    • 2016-02-09
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多