选择不同的行及其出现次数

时间:2018-04-01 20:28:52

标签: mysql mariadb

我有一个表格,其中包含已被替换的订单的订单内容。

表order_contents

contentid(PK) orderid productid
1             3       150
2             3       152
3             4       150
4             4       150
5             4       160
6             4       162

我正在尝试创建一个SQL搜索,它会显示不同的产品,然后显示正在订购的数量。

我现在在这里:

SELECT DISTINCT productid FROM order_contents WHERE orderid = '4';

输出:

productid
150
160
162

这显示了很棒的不同产品,但现在我还需要另一列来显示已订购的产品数量。我尝试过count(*)和类似的,但结果只包含一行。

我需要什么:

productid     quantity
150           2
160           1
162           1

这需要修复:

SELECT DISTINCT productid, < ??? > as quantity FROM order_contents WHERE orderid = '4';

帮助将不胜感激。也许我做了一个单词搜索,但似乎没有这类问题的重复。

更新 好吧,我承认我觉得有点愚蠢,因为答案显然是使用GROUP BY。这就是我想要的:

SELECT DISTINCT productid, count(productid) as quantity FROM order_contents WHERE orderid = '4' GROUP BY productid;

1 个答案:

答案 0 :(得分:0)

是的,您错过了GROUP BY子句。要创建一个很棒的SQL,你可以使用GROUP_CONCAT,看看这个:

数据:

alemonitor-> select * from order_contents;
+-----------+---------+-----------+------+
| contentid | orderid | productid | qty  |
+-----------+---------+-----------+------+
|         2 |       3 |       150 |    5 |
|         4 |       3 |       152 |   93 |
|         6 |       4 |       150 |   50 |
|         8 |       4 |       150 |   69 |
|        10 |       4 |       160 |   96 |
|        12 |       4 |       162 |   74 |
+-----------+---------+-----------+------+
6 rows in set (0.00 sec)

解决方案:

alemonitor-> SELECT productid, GROUP_CONCAT(qty) FROM order_contents GROUP BY productid;
+-----------+-------------------+
| productid | GROUP_CONCAT(qty) |
+-----------+-------------------+
|       150 | 5,50,69           |
|       152 | 93                |
|       160 | 96                |
|       162 | 74                |
+-----------+-------------------+
4 rows in set (0.00 sec)

享受它!

亚历