V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
champloo
V2EX  ›  Java

Java 在使用 sql 语句 group by 时,遇到的一个困惑

  •  
  •   champloo · 2019-08-25 09:25:35 +08:00 · 5016 次点击
    这是一个创建于 1916 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个销售记录表 包含了一些如下的内容 sellnotes: name money date (名称) (销售总额金额) (日期) 商品 A 100 2019 年 7 月 25 日 商品 B 200 2019 年 7 月 25 日 商品 C 300 2019 年 7 月 25 日 商品 A 6600 2019 年 7 月 24 日 商品 B 99800 2019 年 7 月 24 日

    最后想实现的是:通过 select name,sum(money) from Table where date>'2019 年 7 月 23 日' group by name desc 该语句得到的数据集 来源 A 99900 来源 B 6800 来源 C 300

    然后返回前端进行展示,现在卡在 sql 语句会写,但是返回类型,用什么去放这 3 条数据,我查了一下资料还是不明白,有老哥给个方案吗 我想的办法是用 List<商品> 去放,这样做是对的吗

    11 条回复    2019-09-02 17:26:58 +08:00
    champloo
        1
    champloo  
    OP
       2019-08-25 09:27:28 +08:00
    空格被缩进了,表内容就是 3 个字段,分别是商品,销售额,日期,一行记录的意思是某天某商品销售总额,现在想把某几天的销售总额拿来汇总,进行展示
    champloo
        2
    champloo  
    OP
       2019-08-25 09:44:22 +08:00
    刚刚查了一下怎么放代码,大家点一下 gist,蟹蟹
    https://gist.github.com/purechamploo/0274d619b1cea89180e7b784c5cf6996
    Raymon111111
        3
    Raymon111111  
       2019-08-25 10:11:06 +08:00
    如果你用的是 mybatis + xml 的方式去写这个 sql

    语句写成 select name, sum(money) as money ...

    那么接它返回值的类只要有 name 和 money 即可, resultType 那个属性里的类
    champloo
        4
    champloo  
    OP
       2019-08-25 10:24:38 +08:00
    @Raymon111111 蟹蟹回复,我想我找到了我的问题的答案,你讲的 as money 只要实体类有这个字段就能返回,这一点解决了我的问题,只是我并不是在 mybatis 中使用,是使用 greendao 框架在 Android 自带的数据库中使用 group by 语句,我相信在 greendao 中也能用同样的方式解决这个问题,蟹蟹拉
    litanyue
        5
    litanyue  
       2019-08-25 10:24:50 +08:00
    sum(money) as money.
    sum(money)不能被映射到结果的类里,因为类里没有 sum 这个成员。
    choice4
        6
    choice4  
       2019-08-25 12:08:57 +08:00 via Android
    加个 DTO
    BaiMax
        7
    BaiMax  
       2019-08-25 12:56:06 +08:00 via Android
    一般来说,用 List<Object[]>
    champloo
        8
    champloo  
    OP
       2019-08-25 14:14:52 +08:00 via Android
    @litanyue 谢谢回复,我目前的做法是,android 自带的 SQLite 可以用游标去取返回行的具体数据,我就不把它映射成对象了。但是一会儿我会试试能不能,因为 money 是类的一个属性
    @choice4 DTO 我下去了解一下
    @BaiMax 谢谢回复,用这种方式去接,list 集合每个元素放的是不同对象,取出来要进行相应的转型,很合理
    deco
        9
    deco  
       2019-08-29 09:51:37 +08:00
    不是有 ORM 框架或者自己封装的 DAO 层来解决,比如 MyBatis、Hibernate....他们不是可以自动将 sql 的数据转为 List<Obeject>
    TraceurMW
        10
    TraceurMW  
       2019-09-01 19:44:34 +08:00
    List<Map<String,Object>>
    champloo
        11
    champloo  
    OP
       2019-09-02 17:26:58 +08:00
    @deco 谢谢回复,就是使用的 ORM 框架,android 的 greendao
    @TraceurMW 谢谢回复,明白了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3331 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:56 · PVG 12:56 · LAX 20:56 · JFK 23:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.