我有一个表格,其中包含已被替换的订单的订单内容。
表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;
答案 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)
享受它!
亚历