如何在 SQL 连接中创建多个 where 子句
How to make multiple where clause in SQL joins
我有两个tablecolorcast_app_show和colorcast_app_content.
我正在使用 postgreSQL 数据库。
我想从节目 table 和内容中获取所有节目数据 table 获取内容数据的计数,但 draft=false。
colorcast_app_show table 数据:
id | show_name | description | host_name | host_social_account_link | thumbnail_image | publish_date | status | created_on | user_id
----+-----------+-------------+-----------+--------------------------+----------------------------------------+--------------+--------+----------------------------------+---------
1 | Test1 | nil | nil | nil | media/download_6W1VYGZ.jpg | 2022-01-04 | f | 2022-01-04 16:34:55.84046+05:30 | 1
2 | ttt | desc | name | link | media/MicrosoftTeams-image_UMTq0YY.png | 2022-01-19 | f | 2022-01-05 17:12:39.4206+05:30 | 2
7 | show 2 | desc | name | link | media/MicrosoftTeams-image_WLoXCfp.png | 2022-01-12 | f | 2022-01-13 00:49:04.345571+05:30 | 2
10 | sdsds | sdsds | dssds | link | media/MicrosoftTeams-image_O4BrUjO.png | 2022-01-13 | f | 2022-01-13 12:02:34.404602+05:30 | 2
13 | show 1 | desc | name | link | media/signin_Y68p1uT.jpg | 2022-01-14 | f | 2022-01-13 13:43:34.328246+05:30 | 60
14 | show 2 | njnjsnd | jjj | kjkjk | media/download_EXIHERo.jpg | 2022-01-13 | f | 2022-01-13 14:37:27.999332+05:30 | 60
15 | show 3 | desc | name | link | media/MicrosoftTeams-image_nEojgxZ.png | 2022-01-13 | f | 2022-01-13 17:13:22.050878+05:30 | 60
colorcast_app_content table 数据:
id | content_type | sponsor_link | status | added_on | content_file | title | subtitle | description | publish_now | schedule_release | expiration | show_id | user_id | draft
----+--------------+--------------+--------+----------------------------------+------------------------------------+--------+----------+-------------+-------------+------------------+------------+---------+---------+-------
46 | Lecture | links | f | 2022-01-13 13:43:52.959811+05:30 | media/ADP_ver3_-_Copy_Pb8hwPq.xlsx | Title1 | dssd | ddsds | Now | 2022-01-13 | 2022-01-12 | 13 | 60 | f
48 | Lecture | dsdsds | f | 2022-01-13 14:46:20.242004+05:30 | media/Dancing_Script_GTlu8Cx.zip | sdsds | sdsds | ssdsds | Later | 2022-01-13 | 2022-01-27 | 14 | 60 | t
47 | Seminar | sss | f | 2022-01-13 14:43:32.773371+05:30 | media/Dancing_Script_TU5JCBx.zip | sdsdsd | sfsfs | kjkjkjk | Later | 2022-01-13 | 2022-01-20 | 15 | 60 | t
45 | Lecture | link | f | 2022-01-13 12:58:19.745322+05:30 | media/Dancing_Script_Bn1DtxG.zip | Title1 | nullllll | nsss | Later | 2022-01-13 | 2022-01-19 | 7 | 2 | f
下面我用过SQL加入:
SELECT cas.show_name, COUNT(cac.show_id), cas.status, to_char("created_on", 'DD/MM/YYYY'), to_char("publish_date", 'DD/MM/YYYY'), cas.id FROM colorcast_app_show as cas LEFT JOIN colorcast_app_content as cac ON cac.show_id = cas.id where cas.user_id=60 GROUP BY cas.id, cas.show_name;
得到以下输出
show_name | count | status | to_char | to_char | id
-----------+-------+--------+------------+------------+----
show 1 | 1 | f | 13/01/2022 | 14/01/2022 | 13
show 2 | 1 | f | 13/01/2022 | 13/01/2022 | 14
show 3 | 1 | f | 13/01/2022 | 13/01/2022 | 15
我想要如下输出:
show_name | count | status | to_char | to_char | id
-----------+-------+--------+------------+------------+----
show 1 | 1 | f | 13/01/2022 | 14/01/2022 | 13
show 2 | 0 | f | 13/01/2022 | 13/01/2022 | 14
show 3 | 0 | f | 13/01/2022 | 13/01/2022 | 15
如上输出显示 2 和显示 3 内容保存在草稿中,所以我不想计算该数据。
如果有人有解决办法请告诉我。
提前致谢。
SELECT cas.show_name,
COUNT(cac.show_id),
cas.status,
to_char("created_on", 'DD/MM/YYYY'),
to_char("publish_date", 'DD/MM/YYYY'),
cas.id
FROM colorcast_app_show as cas
LEFT OUTER JOIN colorcast_app_content as cac
ON cac.show_id = cas.id
AND cac.draft = false
WHERE cas.user_id=60
GROUP BY cas.id, cas.show_name;
在您的 SELECT
中,您可以将 COUNT
更改为 SUM
并在函数内部添加 CASE
以执行如下操作:
SELECT cas.show_name,
SUM(CASE WHEN cac.publish_now = 'Now' THEN 1 ELSE 0 END),
cas.status,
to_char("created_on", 'DD/MM/YYYY'),
to_char("publish_date", 'DD/MM/YYYY'),
cas.id
FROM colorcast_app_show as cas
LEFT JOIN colorcast_app_content as cac
ON cac.show_id = cas.id where cas.user_id=60
GROUP BY cas.id, cas.show_name;
这将指定仅当它处于 published/publishable 状态时才要将“计数”(从技术上讲是一个总和,但它具有相同的效果)加一。
我有两个tablecolorcast_app_show和colorcast_app_content.
我正在使用 postgreSQL 数据库。
我想从节目 table 和内容中获取所有节目数据 table 获取内容数据的计数,但 draft=false。
colorcast_app_show table 数据:
id | show_name | description | host_name | host_social_account_link | thumbnail_image | publish_date | status | created_on | user_id
----+-----------+-------------+-----------+--------------------------+----------------------------------------+--------------+--------+----------------------------------+---------
1 | Test1 | nil | nil | nil | media/download_6W1VYGZ.jpg | 2022-01-04 | f | 2022-01-04 16:34:55.84046+05:30 | 1
2 | ttt | desc | name | link | media/MicrosoftTeams-image_UMTq0YY.png | 2022-01-19 | f | 2022-01-05 17:12:39.4206+05:30 | 2
7 | show 2 | desc | name | link | media/MicrosoftTeams-image_WLoXCfp.png | 2022-01-12 | f | 2022-01-13 00:49:04.345571+05:30 | 2
10 | sdsds | sdsds | dssds | link | media/MicrosoftTeams-image_O4BrUjO.png | 2022-01-13 | f | 2022-01-13 12:02:34.404602+05:30 | 2
13 | show 1 | desc | name | link | media/signin_Y68p1uT.jpg | 2022-01-14 | f | 2022-01-13 13:43:34.328246+05:30 | 60
14 | show 2 | njnjsnd | jjj | kjkjk | media/download_EXIHERo.jpg | 2022-01-13 | f | 2022-01-13 14:37:27.999332+05:30 | 60
15 | show 3 | desc | name | link | media/MicrosoftTeams-image_nEojgxZ.png | 2022-01-13 | f | 2022-01-13 17:13:22.050878+05:30 | 60
colorcast_app_content table 数据:
id | content_type | sponsor_link | status | added_on | content_file | title | subtitle | description | publish_now | schedule_release | expiration | show_id | user_id | draft
----+--------------+--------------+--------+----------------------------------+------------------------------------+--------+----------+-------------+-------------+------------------+------------+---------+---------+-------
46 | Lecture | links | f | 2022-01-13 13:43:52.959811+05:30 | media/ADP_ver3_-_Copy_Pb8hwPq.xlsx | Title1 | dssd | ddsds | Now | 2022-01-13 | 2022-01-12 | 13 | 60 | f
48 | Lecture | dsdsds | f | 2022-01-13 14:46:20.242004+05:30 | media/Dancing_Script_GTlu8Cx.zip | sdsds | sdsds | ssdsds | Later | 2022-01-13 | 2022-01-27 | 14 | 60 | t
47 | Seminar | sss | f | 2022-01-13 14:43:32.773371+05:30 | media/Dancing_Script_TU5JCBx.zip | sdsdsd | sfsfs | kjkjkjk | Later | 2022-01-13 | 2022-01-20 | 15 | 60 | t
45 | Lecture | link | f | 2022-01-13 12:58:19.745322+05:30 | media/Dancing_Script_Bn1DtxG.zip | Title1 | nullllll | nsss | Later | 2022-01-13 | 2022-01-19 | 7 | 2 | f
下面我用过SQL加入:
SELECT cas.show_name, COUNT(cac.show_id), cas.status, to_char("created_on", 'DD/MM/YYYY'), to_char("publish_date", 'DD/MM/YYYY'), cas.id FROM colorcast_app_show as cas LEFT JOIN colorcast_app_content as cac ON cac.show_id = cas.id where cas.user_id=60 GROUP BY cas.id, cas.show_name;
得到以下输出
show_name | count | status | to_char | to_char | id
-----------+-------+--------+------------+------------+----
show 1 | 1 | f | 13/01/2022 | 14/01/2022 | 13
show 2 | 1 | f | 13/01/2022 | 13/01/2022 | 14
show 3 | 1 | f | 13/01/2022 | 13/01/2022 | 15
我想要如下输出:
show_name | count | status | to_char | to_char | id
-----------+-------+--------+------------+------------+----
show 1 | 1 | f | 13/01/2022 | 14/01/2022 | 13
show 2 | 0 | f | 13/01/2022 | 13/01/2022 | 14
show 3 | 0 | f | 13/01/2022 | 13/01/2022 | 15
如上输出显示 2 和显示 3 内容保存在草稿中,所以我不想计算该数据。
如果有人有解决办法请告诉我。
提前致谢。
SELECT cas.show_name,
COUNT(cac.show_id),
cas.status,
to_char("created_on", 'DD/MM/YYYY'),
to_char("publish_date", 'DD/MM/YYYY'),
cas.id
FROM colorcast_app_show as cas
LEFT OUTER JOIN colorcast_app_content as cac
ON cac.show_id = cas.id
AND cac.draft = false
WHERE cas.user_id=60
GROUP BY cas.id, cas.show_name;
在您的 SELECT
中,您可以将 COUNT
更改为 SUM
并在函数内部添加 CASE
以执行如下操作:
SELECT cas.show_name,
SUM(CASE WHEN cac.publish_now = 'Now' THEN 1 ELSE 0 END),
cas.status,
to_char("created_on", 'DD/MM/YYYY'),
to_char("publish_date", 'DD/MM/YYYY'),
cas.id
FROM colorcast_app_show as cas
LEFT JOIN colorcast_app_content as cac
ON cac.show_id = cas.id where cas.user_id=60
GROUP BY cas.id, cas.show_name;
这将指定仅当它处于 published/publishable 状态时才要将“计数”(从技术上讲是一个总和,但它具有相同的效果)加一。