数据分组查询

MySql help-doc 7年前 (2014-04-27) 485次浏览 0个评论

有如下表A:
name   product_id                 model                              Material
TYLER   1                           Armband for phone               A-AB00P133A-FT01
TYLER   2                           Armband for phone               A-AB00P133A-FT02
TYLER   3                           Armband for phone               A-AB00P133A-FT03
TYLER   7                           Armband for phone               A-AB00P146A-FT01
TYLER   8                           Armband for phone               A-AB00P146A-FT02
TYLER   9                           Armband for phone               A-AB00P146A-FT03
TYLER   49                           Armband for phone               A-AB00P162A-FT01
TYLER   50                           Armband for phone               A-AB00P162A-FT02
HIPPO   85                           Power for Home & Office       A-AD00-0002-EU
HIPPO   86                           Power for Home & Office       A-AD00-0002-ES
KUGA   88                           Power for Home & Office       A-AD00-0202-EU
WOLF   91                           Power for Home & Office       A-AD00-0402-BS

我想根据字段Material和model、name同时分组,条件:group by substring(Material,1,length(Material)-2),model,name
但却没有想要的效果。

想要的结果如下,SQL如何写呢?请帮忙,感谢。
name   product_id                 model                              Material
TYLER   1                           Armband for phone               A-AB00P133A-FT01
TYLER   7                           Armband for phone               A-AB00P146A-FT01
TYLER   49                           Armband for phone               A-AB00P162A-FT01
HIPPO   85                           Power for Home & Office       A-AD00-0002-EU
KUGA   88                           Power for Home & Office       A-AD00-0202-EU
WOLF   91                           Power for Home & Office       A-AD00-0402-BS

就是先通过字段Material(剔除最后2位)分组,然后再根据name和model来分组。
求大牛帮忙。谢谢。
70分
mysql> select * from ta;
+-------+------------+-------------------------+------------------+
| name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          2 | Armband for phone       | A-AB00P133A-FT02 |
| TYLER |          3 | Armband for phone       | A-AB00P133A-FT03 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |          8 | Armband for phone       | A-AB00P146A-FT02 |
| TYLER |          9 | Armband for phone       | A-AB00P146A-FT03 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| TYLER |         50 | Armband for phone       | A-AB00P162A-FT02 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| HIPPO |         86 | Power for Home & Office | A-AD00-0002-ES   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
12 rows in set (0.00 sec)

mysql> select *
    -> from ta
    -> group by name,model,left(Material,length(Material)-2)
    -> order by product_id;
+-------+------------+-------------------------+------------------+
| name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
6 rows in set (0.00 sec)

mysql>
30分
mysql> SELECT * FROM TTLA;
+-------+------------+-------------------------+------------------+
| Name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          2 | Armband for phone       | A-AB00P133A-FT02 |
| TYLER |          3 | Armband for phone       | A-AB00P133A-FT03 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |          8 | Armband for phone       | A-AB00P146A-FT02 |
| TYLER |          9 | Armband for phone       | A-AB00P146A-FT03 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| TYLER |         50 | Armband for phone       | A-AB00P162A-FT02 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| HIPPO |         86 | Power for Home & Office | A-AD00-0002-ES   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
12 rows in set (0.00 sec)

mysql> SELECT * FROM TTLA A WHERE NOT EXISTS(
    -> SELECT 1 FROM TTLA WHERE A.`Name`=`Name`
    -> AND A.`model`=`model`
    -> AND SUBSTRING(A.Material,1,LENGTH(A.Material)-2)=
    -> SUBSTRING(Material,1,LENGTH(Material)-2)
    -> AND A.`product_id`>`product_id`
    -> );
+-------+------------+-------------------------+------------------+
| Name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
6 rows in set (0.00 sec)

mysql>
谢谢,为啥我的那种写法不行呢?

引用 2 楼 ACMAIN_CHM 的回复:
mysql> select * from ta;
+-------+------------+-------------------------+------------------+
| name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          2 | Armband for phone       | A-AB00P133A-FT02 |
| TYLER |          3 | Armband for phone       | A-AB00P133A-FT03 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |          8 | Armband for phone       | A-AB00P146A-FT02 |
| TYLER |          9 | Armband for phone       | A-AB00P146A-FT03 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| TYLER |         50 | Armband for phone       | A-AB00P162A-FT02 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| HIPPO |         86 | Power for Home & Office | A-AD00-0002-ES   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
12 rows in set (0.00 sec)

mysql> select *
    -> from ta
    -> group by name,model,left(Material,length(Material)-2)
    -> order by product_id;
+-------+------------+-------------------------+------------------+
| name  | product_id | model                   | Material         |
+-------+------------+-------------------------+------------------+
| TYLER |          1 | Armband for phone       | A-AB00P133A-FT01 |
| TYLER |          7 | Armband for phone       | A-AB00P146A-FT01 |
| TYLER |         49 | Armband for phone       | A-AB00P162A-FT01 |
| HIPPO |         85 | Power for Home & Office | A-AD00-0002-EU   |
| KUGA  |         88 | Power for Home & Office | A-AD00-0202-EU   |
| WOLF  |         91 | Power for Home & Office | A-AD00-0402-BS   |
+-------+------------+-------------------------+------------------+
6 rows in set (0.00 sec)

mysql>
引用 4 楼 wwx840723 的回复:

谢谢,为啥我的那种写法不行呢?

至少请楼主把你的SQL语句贴完整出来吧。另外不行是指什么? 产生的结果什么样?

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧

谢谢版主、
我再琢磨下。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据分组查询
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!