求Postgresql 查询语句

beret 2009-06-30 09:02:06
Postgresql数据库按以下表结构和记录,查询结果集:

id user_id book_id pub_date
1 1001 1 2009-01-18
2 1001 1 2009-01-20
3 1001 2 2009-02-12
4 1001 3 2009-03-11
5 1001 4 2009-04-20
6 1001 5 2009-05-20
7 1001 6 2009-06-20
8 1001 7 2009-07-20

9 1002 1 2009-01-20
10 1002 2 2009-01-20
11 1002 3 2009-01-20
12 1002 3 2009-04-20
13 1002 5 2009-05-20
14 1002 6 2009-06-20
15 1002 7 2009-07-20

结果集一:

user_id book_1 book_2 book_3 book_4 book_5 book_6 book_7

1001 true true true true true true true
1002 true true ture false true ture true


结果集二:

user_id 1月份 2月份 3月份 4月份 5月份 6月份 7月份
1001 1 2 3 4 5 6 7
1002 1,2,3 3 5 6 7


请问以上二种结果集的sql语句怎么写,谢谢!
...全文
162 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beret 2009-07-01
  • 打赏
  • 举报
回复
感謝 ACMAIN_CHM 第一個問題已搞掂,

請問第二種結果集如何處理。
條件是:
以每年的9月份到次年8月份為一個周期,如時當前查詢時間處於1月份到8月份之間,就是查詢去年9月份開始至當前月的記錄,如果當前查詢時間處於9月份到12月之間,就查詢,本年9月份至當前月的記錄。

按月統計,每個用戶買了幾本書,該如何處理,
ACMAIN_CHM 2009-07-01
  • 打赏
  • 举报
回复

如果你只有 7 本书,则可以用下面的。

select user_id,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=1 THEN book_id*(10^book_id) ELSE 0 END) as 1月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=2 THEN book_id*(10^book_id) ELSE 0 END) as 2月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=3 THEN book_id*(10^book_id) ELSE 0 END) as 3月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=4 THEN book_id*(10^book_id) ELSE 0 END) as 4月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=5 THEN book_id*(10^book_id) ELSE 0 END) as 5月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=6 THEN book_id*(10^book_id) ELSE 0 END) as 6月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=7 THEN book_id*(10^book_id) ELSE 0 END) as 7月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=8 THEN book_id*(10^book_id) ELSE 0 END) as 8月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=9 THEN book_id*(10^book_id) ELSE 0 END) as 9月份,
sum(CASE WHEN EXTRACT(MONTH FROM pub_date)=10 THEN book_id*(10^book_id) ELSE 0 END) as 10月份
from 表
group by user_id
ACMAIN_CHM 2009-07-01
  • 打赏
  • 举报
回复

结果集二:

user_id 1月份 2月份 3月份 4月份 5月份 6月份 7月份
1001 1 2 3 4 5 6 7
1002 1,2,3 3 5 6 7



这个“1,2,3”比较复杂,没有办法直接得到。
amdwinter 2009-07-01
  • 打赏
  • 举报
回复
分一点吧
beret 2009-06-30
  • 打赏
  • 举报
回复
第二个结果集查询呢?
beret 2009-06-30
  • 打赏
  • 举报
回复
谢谢大大,明天回公司测试,完全您就等着接分吧。呵呵。。受教了!
ACMAIN_CHM 2009-06-30
  • 打赏
  • 举报
回复

select user_id,
sum(CASE WHEN book_id=1 THEN 1 ELSE 0 END)>0 as book_1,
sum(CASE WHEN book_id=2 THEN 1 ELSE 0 END)>0 as book_2,
sum(CASE WHEN book_id=3 THEN 1 ELSE 0 END)>0 as book_3,
sum(CASE WHEN book_id=4 THEN 1 ELSE 0 END)>0 as book_4,
sum(CASE WHEN book_id=5 THEN 1 ELSE 0 END)>0 as book_5,
sum(CASE WHEN book_id=6 THEN 1 ELSE 0 END)>0 as book_6,
sum(CASE WHEN book_id=7 THEN 1 ELSE 0 END)>0 as book_7,
sum(CASE WHEN book_id=8 THEN 1 ELSE 0 END)>0 as book_8,
sum(CASE WHEN book_id=9 THEN 1 ELSE 0 END)>0 as book_9,
sum(CASE WHEN book_id=10 THEN 1 ELSE 0 END)>0 as book_10,
from 表
group by user_id
beret 2009-06-30
  • 打赏
  • 举报
回复
一共会有book 10,我上面只是简单举例,月份的话,一年12个月都有可能。查询范围是从本年9月份开始到次年8月为一个周期。
ACMAIN_CHM 2009-06-30
  • 打赏
  • 举报
回复

是不是只到 book7 ?还是不确定的?

同样,第二个也一样?月份固定?显示本年 12个月的?还是不确定?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧