我有这个问题:
SELECT a.SELECTEDID contentId,
a.SELECTED_COUNT selectedCount,
a.P_ID
from (
SELECT t1.SELECTEDID,
ROUND(SUM(t1.SELECTED_COUNT*(2/3))) SELECTED_COUNT ,
t1.P_ID
FROM A_SEARCH t1
WHERE t1.P_ID = '11'
and t1.PERIOD >= ADD_MONTHS(TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM'), -3)
AND t1.PERIOD < TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM')
GROUP BY t1.P_ID, t1.SELECTEDID
) a
LEFT JOIN
(
SELECT t2.SELECTEDID,
ROUND(SUM(t2.SELECTED_COUNT*2)) SELECTED_COUNT ,
t2.P_ID
FROM A_SEARCH t2
WHERE t2.P_ID ='11'
and t2.PERIOD >= TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM')
GROUP BY t2.P_ID, t2.SELECTEDID
) b
on b.P_ID = a.P_ID
ORDER BY a.SELECTED_COUNT desc;
表格:
P_ID(VARCHAR2),
P_VALUE(VARCHAR2),
SELECTEDID(VARCHAR2),
SELECTED_COUNT(NUMBER),
PERIOD(TIMESTAMP)
始终选择此行
11, bb,test22, 2, 01-APR-18 12.00.00.000000000 AM
此行从未选择
11, aa, test, 2, 01-JUN-18 12.00.00.000000000 AM
我尝试从单个表中进行多个选择,然后按结果排序。
但不知何故,只有查询中的第一个选择是successfuk,并且选择了上面的第一行
但是第二次LEFT JOIN并没有赶上第二排,我看不出有什么问题。
如何选择两行?
答案 0 :(得分:2)
您只是从a
中选择列作为最终输出:
SELECT a.SELECTEDID contentId, a.SELECTED_COUNT selectedCount, a.P_ID
如果b
中的行与加入条件匹配,您还需要从b
中选择列才能显示它们。它们将显示在与a
中匹配行的列相同的行上。
你说
我尝试从单个表中进行多个选择,然后按顺序排序 结果
这意味着您希望为a
和b
子查询的结果获取单独的输出行,这意味着您并不真正想要加入。
您可能需要两个子查询中的UNION
。
答案 1 :(得分:0)
据我所知,您的查询相当于:
SELECT t1.SELECTEDID, ROUND(SUM(t1.SELECTED_COUNT*(2/3))) as SELECTED_COUNT, t1.P_ID
FROM A_SEARCH t1
WHERE t1.P_ID = 11 AND -- I removed the single quotes, assuming the column is a number
t1.PERIOD >= ADD_MONTHS(DATE '2018-05-01', -3) AND
t1.PERIOD < DATE '2018-05-01'
GROUP BY t1.P_ID, t1.SELECTEDID ;
LEFT JOIN
可能会乘以行数;我不认为这是可取的。
另请注意使用date
关键字简化date
文字。