>  Q&A  >  본문

mysql - 请教一下这个SQL怎么写

这是订单表信息

+----+----------+------------+------+
| id | username | goods_name | num  |
+----+----------+------------+------+
|  1 | Tom      | A          |    3 |
|  2 | Rose     | C          |    1 |
|  3 | Rose     | B          |    5 |
|  4 | Tom      | A          |    1 |
+----+----------+------------+------+

现在想找出购买两款以上产品的用户,请问SQL怎么写

各位亲们看清题目啊,是购买两款以上产品的用户,表里面Tom购买了两次,单他都购买的A产品,所有不能被查询出来的,只有Rose,他购买了C和B产品,所以他可以被查询出来

天蓬老师天蓬老师2744일 전760

모든 응답(11)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 13:58:52

    goods_name 不同,才代表是不同款的产品吧。购买2款以上,和购买某款产品的num是2以上,没有什么关系吧。
    楼上的回答都不对。

    select username, count(*) as cnt from t_tablename group by username, goods_name having cnt > 2;

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 13:58:52

    select count(username) as number having number >=2

    躺被窝写的,大概这个意思。

    不好意思,上次没仔细看你的题,也没动脑子随便给了个想法。这次亲测可行,祝楼主工作顺利。

    SELECT
    *,
    count(a.username) as buy_num
    FROM
    /*子表可以剔除购买同样商品的用户,然后根据用户名count就行了*/
        (
            SELECT
                *
            FROM
                你的表名
            GROUP BY
                goods_name
        ) AS a
    GROUP BY a.username
    HAVING buy_num>1

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 13:58:52

    假设表名是record, select count(*) as name_count, sub.username from (select username, goods_name from record group by username, goods_name) as sub group by sub.username where sub.namecount > 2

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:58:52

    SELECT username,COUNT(goods_name) AS count FROM test GROUP BY goods_name HAVING count >= 2

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:58:52

    要count(distinct good_name)

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:58:52

    select username, count(1) as amount from (
    select username, goods_name from odt group by username, goods_name
    ) as ogn
    group by username
    having amount>=2

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:58:52

    SELECT username FROM table_name
        GROUP BY username
        HAVING DISTINCT(goods_name) >= 2;

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:58:52

    第一种:select username,count(t.goods_name) as nums from (select DISTINCT(goods_name),username from shop) as t group by t.username having nums>1;
    改进版的答案:
    select username,count(DISTINCT(goods_name)) as nums from shop group by username having nums>1;
    在我的追加评论里面也有

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:58:52

    select username, count(*) as cnt from (select username from t group by username,goods_name) as a group by a.username having cnt > 2;

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 13:58:52

    SELECT
        username,
        count(DISTINCT goods_name) AS c
    FROM
        table_name
    GROUP BY
        username
    HAVING
        c > 1

    회신하다
    0
  • 취소회신하다