推荐学习书目
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 · Oct 19, 2018 · 3300 views
    This topic created in 2788 days ago, the information mentioned may be changed or developed.
    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 replies    2018-10-19 17:44:30 +08:00
    dovme
        1
    dovme  
       Oct 19, 2018
    行转列?
    reus
        2
    reus  
       Oct 19, 2018
    再来一个 laosun 呢?如果 name 有 1 万种呢?
    你这样的做法,就是挖坑害人。
    hualongbei
        3
    hualongbei  
       Oct 19, 2018
    记得之前学的时候弄过这种绕了半天 工作了发现完全用不到...
    PulpFunction
        4
    PulpFunction  
       Oct 19, 2018
    @reus 意思应该是同一天的相同姓名,求和
    PulpFunction
        5
    PulpFunction  
       Oct 19, 2018
    一点一点来比较简单
    先插日期到表。
    选名字日期,对应的求和(应该好查),也放到表。

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

    哈哈 @reus 我搞错了
    PulpFunction
        6
    PulpFunction  
       Oct 19, 2018
    考虑变成'20181018' | ( 100,200 ) | 220

    括号里面变长应该没问题
    PulpFunction
        7
    PulpFunction  
       Oct 19, 2018
    没用过数据库纯属瞎哔哔路过
    dovme
        8
    dovme  
       Oct 19, 2018
    ```
    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  
       Oct 19, 2018
    是变成'20181018' | ( 100,120 ) | 220
    dovme
        10
    dovme  
       Oct 19, 2018
    应该是可以的,你试一下
    Leigg
        11
    Leigg  
       Oct 19, 2018 via iPhone
    要用到子查询,子查询的条数和要 count 的 name 的个数相关,所以你这个需求仍然需要多条 sql 完成。追求一个 sql 毫无意义。
    PulpFunction
        12
    PulpFunction  
       Oct 19, 2018
    ( 100,120 )换成 name+数据的字典格式

    应该能行 数据也能提取出来
    dovme
        13
    dovme  
       Oct 19, 2018   ❤️ 1
    #8 补充格式好看了一些
    mili8908
        14
    mili8908  
    OP
       Oct 19, 2018
    @dovme 厉害了
    qinrui
        15
    qinrui  
       Oct 19, 2018 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  
       Oct 19, 2018 via iPhone
    @dovme 没必要搞子查询
    dovme
        17
    dovme  
       Oct 19, 2018
    @qinrui 额.好吧,其实意思是一样的,我也脑残了
    likuku
        18
    likuku  
       Oct 19, 2018
    db 只作它本职工作不好么?简单直接高效取出素材数据就好。

    如何拼装输出,让 db 之上的应用层代码去作有何不可?
    SbloodyS
        19
    SbloodyS  
       Oct 19, 2018
    lateral view explode 了解下
    Lsj777
        20
    Lsj777  
       Oct 19, 2018
    磊哥 加波好友撒
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5575 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 06:54 · PVG 14:54 · LAX 23:54 · JFK 02:54
    ♥ Do have faith in what you're doing.