V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mili8908
V2EX  ›  Python

求一个 SQL

  •  
  •   mili8908 · 2018-10-19 16:43:14 +08:00 · 2305 次点击
    这是一个创建于 1987 天前的主题,其中的信息可能已经有所发展或是发生改变。
    table 如下 表名就叫 x_table 吧

    date | name | count
    '20181018' | laowang | 100
    '20181018' | laoli | 120
    '20181016' | laoli | 1440
    '20181016' | laowang | 108

    期望查询到的结果是这样的
    date | count1(laowang 的) | count2(laoli 的) | count1+count2
    '20181018' | 100 | 120 | 220


    写的有点简陋
    20 条回复    2018-10-19 17:44:30 +08:00
    dovme
        1
    dovme  
       2018-10-19 16:50:33 +08:00
    行转列?
    reus
        2
    reus  
       2018-10-19 16:52:40 +08:00
    再来一个 laosun 呢?如果 name 有 1 万种呢?
    你这样的做法,就是挖坑害人。
    hualongbei
        3
    hualongbei  
       2018-10-19 16:57:06 +08:00
    记得之前学的时候弄过这种绕了半天 工作了发现完全用不到...
    PulpFunction
        4
    PulpFunction  
       2018-10-19 16:58:52 +08:00
    @reus 意思应该是同一天的相同姓名,求和
    PulpFunction
        5
    PulpFunction  
       2018-10-19 17:07:49 +08:00
    一点一点来比较简单
    先插日期到表。
    选名字日期,对应的求和(应该好查),也放到表。

    噢噢噢噢 表变长了啊。。。
    name 数会一直增长吗。。就是挖坑啊

    哈哈 @reus 我搞错了
    PulpFunction
        6
    PulpFunction  
       2018-10-19 17:09:38 +08:00
    考虑变成'20181018' | ( 100,200 ) | 220

    括号里面变长应该没问题
    PulpFunction
        7
    PulpFunction  
       2018-10-19 17:10:14 +08:00
    没用过数据库纯属瞎哔哔路过
    dovme
        8
    dovme  
       2018-10-19 17:10:16 +08:00
    ```
    SELECT
    s.date ,
    sum(s.zhangsan) ,
    sum(s.lisi) ,
    sum(s.zhangsan) + sum(s.lisi) 'count1+count2'
    FROM
    (
    SELECT
    date ,
    CASE
    WHEN NAME = 'zhangsan' THEN
    count
    ELSE
    0
    END 'zhangsan' ,
    CASE
    WHEN NAME = 'lisi' THEN
    count
    ELSE
    0
    END 'lisi'
    FROM
    x_table
    ) s
    GROUP BY
    s.date;


    ```

    ![]( )
    PulpFunction
        9
    PulpFunction  
       2018-10-19 17:10:49 +08:00
    是变成'20181018' | ( 100,120 ) | 220
    dovme
        10
    dovme  
       2018-10-19 17:11:17 +08:00
    应该是可以的,你试一下
    Leigg
        11
    Leigg  
       2018-10-19 17:13:32 +08:00 via iPhone
    要用到子查询,子查询的条数和要 count 的 name 的个数相关,所以你这个需求仍然需要多条 sql 完成。追求一个 sql 毫无意义。
    PulpFunction
        12
    PulpFunction  
       2018-10-19 17:16:48 +08:00
    ( 100,120 )换成 name+数据的字典格式

    应该能行 数据也能提取出来
    dovme
        13
    dovme  
       2018-10-19 17:18:16 +08:00   ❤️ 1
    #8 补充格式好看了一些
    mili8908
        14
    mili8908  
    OP
       2018-10-19 17:21:28 +08:00
    @dovme 厉害了
    qinrui
        15
    qinrui  
       2018-10-19 17:23:49 +08:00 via iPhone
    Select
    Date date,
    Sum(case when name=‘ laowang ’ then count else 0 end) count1,
    Sum(...) count2,
    Sum(...)+Sum(...) count1and2
    From
    X_table
    Group by
    Date
    qinrui
        16
    qinrui  
       2018-10-19 17:24:22 +08:00 via iPhone
    @dovme 没必要搞子查询
    dovme
        17
    dovme  
       2018-10-19 17:28:46 +08:00
    @qinrui 额.好吧,其实意思是一样的,我也脑残了
    likuku
        18
    likuku  
       2018-10-19 17:32:12 +08:00
    db 只作它本职工作不好么?简单直接高效取出素材数据就好。

    如何拼装输出,让 db 之上的应用层代码去作有何不可?
    SbloodyS
        19
    SbloodyS  
       2018-10-19 17:35:24 +08:00
    lateral view explode 了解下
    Lsj777
        20
    Lsj777  
       2018-10-19 17:44:30 +08:00
    磊哥 加波好友撒
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5333 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:16 · PVG 17:16 · LAX 02:16 · JFK 05:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.