Python中如何编写SQL查询语句?
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
写的有点简陋
Python中如何编写SQL查询语句?
行转列?
在Python里写SQL查询,直接用字符串就行,但更推荐用参数化查询来防SQL注入。比如用sqlite3库:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 用问号占位符
user_id = 5
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
# 或者用命名占位符
cursor.execute("SELECT * FROM users WHERE id = :id", {'id': user_id})
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
用ORM框架比如SQLAlchemy的话,查询会更Pythonic:
from sqlalchemy import create_engine, MetaData, Table
engine = create_engine('sqlite:///example.db')
metadata = MetaData()
users = Table('users', metadata, autoload_with=engine)
# 直接写SQL
result = engine.execute("SELECT * FROM users WHERE id = :id", id=5)
# 用SQLAlchemy的查询API
from sqlalchemy import select
stmt = select(users).where(users.c.id == 5)
result = engine.execute(stmt)
for row in result:
print(row)
核心就两点:简单查询直接写字符串,复杂或需要防注入就用参数化。
再来一个 laosun 呢?如果 name 有 1 万种呢?
你这样的做法,就是挖坑害人。
意思应该是同一天的相同姓名,求和
一点一点来比较简单
先插日期到表。
选名字日期,对应的求和(应该好查),也放到表。
噢噢噢噢 表变长了啊。。。
name 数会一直增长吗。。就是挖坑啊
哈哈 我搞错了
考虑变成’20181018’ | ( 100,200 ) | 220
括号里面变长应该没问题
没用过数据库纯属瞎哔哔路过
<br>SELECT<br> <a target="_blank" href="http://s.date" rel="nofollow noopener">s.date</a> ,<br> sum(s.zhangsan) ,<br> sum(s.lisi) ,<br> sum(s.zhangsan) + sum(s.lisi) 'count1+count2'<br>FROM<br> (<br> SELECT<br> date ,<br> CASE<br> WHEN NAME = 'zhangsan' THEN<br> count<br> ELSE<br> 0<br> END 'zhangsan' ,<br> CASE<br> WHEN NAME = 'lisi' THEN<br> count<br> ELSE<br> 0<br> END 'lisi'<br> FROM<br> x_table<br> ) s<br>GROUP BY<br> <a target="_blank" href="http://s.date" rel="nofollow noopener">s.date</a>;<br><br><br>

是变成’20181018’ | ( 100,120 ) | 220
应该是可以的,你试一下
要用到子查询,子查询的条数和要 count 的 name 的个数相关,所以你这个需求仍然需要多条 sql 完成。追求一个 sql 毫无意义。
( 100,120 )换成 name+数据的字典格式
应该能行 数据也能提取出来
#8 补充格式好看了一些
厉害了
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
额.好吧,其实意思是一样的,我也脑残了
db 只作它本职工作不好么?简单直接高效取出素材数据就好。
如何拼装输出,让 db 之上的应用层代码去作有何不可?
lateral view explode 了解下
磊哥 加波好友撒


