我正在尝试在单个sql语句中执行多个计数。
我有两个人,马克和克里斯。
我想知道每个人在某个特定日期乘坐的次数。这是我正在使用的代码。
SELECT TO_DATE(TRAIN.DEPARTURE_DATE,'YYYYMM')
, (select COUNT(DISTINCT DEPARTURE_DATE)
FROM TRAIN
WHERE PERSON_ID='28' AND DEPARTURE_STATION = 'DUBLIN') AS Mark
, (select COUNT(DISTINCT DEPARTURE_DATE)
FROM TRAIN
WHERE PERSON_ID='29' AND DEPARTURE_STATION = 'DUBLIN') AS Chris
FROM TRAIN
GROUP BY DEPARTURE_DATE
此代码生成的格式是正确的,但结果不是。结果是
TO_DATE Mark Chris
2009-01-01 8 11
2009-01-02 8 11
2009-01-03 8 11
等...
正确的结果
TO_DATE Mark Chris
2009-01-01 8 11
2009-01-02 3 7
2009-01-03 6 5
等...
任何人都可以看到我的代码出现问题吗?
感谢所有帮助
答案 0 :(得分:4)
试试这个:
SELECT TO_DATE(TRAIN.DEPARTURE_DATE,'YYYYMM')
, (select COUNT(*)
FROM TRAIN
WHERE PERSON_ID='28' AND DEPARTURE_STATION = 'DUBLIN'
AND DepartureDate = t.DepartureDate) AS Mark
, (select COUNT(*)
FROM TRAIN
WHERE PERSON_ID='29' AND DEPARTURE_STATION = 'DUBLIN'
AND DepartureDate = t.DepartureDate) AS Chris
FROM TRAIN t
GROUP BY DEPARTURE_DATE
答案 1 :(得分:2)
子查询中还需要一个条件:
AND TO_DATE(ti.DEPARTURE_DATE,'YYYYMM') = TO_DATE(to.DEPARTURE_DATE,'YYYYMM')
SELECT TO_DATE(TRAIN.DEPARTURE_DATE,'YYYYMM')
, (select COUNT(DISTINCT DEPARTURE_DATE)
FROM TRAIN ti
WHERE PERSON_ID='28' AND DEPARTURE_STATION = 'DUBLIN' AND TO_DATE(ti.DEPARTURE_DATE,'YYYYMM') = TO_DATE(to.DEPARTURE_DATE,'YYYYMM')) AS Mark
, (select COUNT(DISTINCT DEPARTURE_DATE)
FROM TRAIN
WHERE PERSON_ID='29' AND DEPARTURE_STATION = 'DUBLIN' AND TO_DATE(ti.DEPARTURE_DATE,'YYYYMM') = TO_DATE(to.DEPARTURE_DATE,'YYYYMM')) AS Chris
FROM TRAIN to
GROUP BY DEPARTURE_DATE
答案 2 :(得分:1)
您在此处不需要多个相关的子查询,而是可以使用PIVOT
技术。
SELECT TO_DATE(TRAIN.DEPARTURE_DATE, 'YYYYMM'),
SUM(CASE
WHEN person_id = 28 THEN 1
ELSE 0
END) Mark,
SUM(CASE
WHEN person_id = 29 THEN 1
ELSE 0
END) Chris
FROM TRAIN
WHERE DEPARTURE_STATION = 'DUBLIN'
AND person_id IN ( 28, 29 )
GROUP BY TO_DATE(TRAIN.DEPARTURE_DATE, 'YYYYMM')