gpt4 book ai didi

mysql - 计算两个不同的列

转载 作者:可可西里 更新时间:2023-11-01 06:31:56 25 4
gpt4 key购买 nike

所以我的数据库里有这张表

Item    Cat1    Cat2
--------------------
Aaa Red Used
Aaa Blu Used
Bbb Gre New
Bbb Blu New
Ccc Gre New
Ddd Blu Used

我想显示有多少 Items 在一列中是 Red 而在另一列中是 New ,如下所示:

Item    Red     New
-------------------
Aaa 1 0
Bbb 0 2
Ccc 0 1
Ddd 0 0

我知道如何在两个表格中显示它们,但不知道如何将它们合并。

$query = mysql_query("SELECT *, count(Item) AS CountItem FROM Table WHERE Cat1 = 'Red' GROUP BY Item");
$query2 = mysql_query("SELECT *, count(Item) AS CountItem2 FROM Table WHERE Cat2 = 'New' GROUP BY Item");

while($row = mysql_fetch_array($query) AND $row2 = mysql_fetch_array($query2))
{
echo $row['CountItem'] . " " . $row2['CountItem2'] . " " . $row['Item'];
echo "<br>";
}

这似乎不起作用,因为它只显示标记为 Aaa 的项目,我无法理解我在这里做错了什么。

最佳答案

这是 SUM(CASE) 的作业:

SELECT 
Item,
SUM(CASE WHEN Cat1 = 'Red' THEN 1 ELSE 0 END) AS Red,
SUM(CASE WHEN Cat2 = 'New' THEN 1 ELSE 0 END) AS New
FROM Table
GROUP BY Item

这里的想法是,对于所有 Red 行,您分配一个 1(其他行得到一个 0),然后将这些 1 和 0 相加以获得计数。 New 值也一样。

您也可以通过利用 MySQL 的 0/1 bool 求值来更简洁地做同样的事情:

SELECT 
Item,
SUM(Cat1 = 'Red') AS Red,
SUM(Cat2 = 'New') AS New
FROM Table
GROUP BY Item

在此示例中,Cat1 = 'Red' 如果为真,将返回 1,然后将它们相加。 SUM(CASE) 方法将更易于跨 RDBMS 而不是 MySQL,但如果其他系统以不同方式处理它们的 bool 值。

编辑:

然后澄清一下,在 PHP 中,您将以 $row['Red']$row['New'] 的形式检索它们。您可以将别名更改为您需要的任何别名:AS RedAS CountItem 以匹配您的原始...

while($row = mysql_fetch_array($query) AND $row2 = mysql_fetch_array($query2)) {
echo $row['Red'] . " " . $row2['New'] . " " . $row['Item'];
echo "<br>";
}

关于mysql - 计算两个不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com