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

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

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

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

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

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