2014-05-02 199 views
-1

我的查詢:計數不同的列

SELECT DISTINCT job_id, cust_id, a.skill_id FROM aaa.jp_job_skill_ref a INNER JOIN aaa.jp_cust_skill_ref b ON a.skill_id = b.skill_id ORDER BY `job_id`, `cust_id`, `skill_id`; 

返回數據的3列。然而,這兩個表是與數百相同的cust_id和skill_id也,或者JOB_ID的參考表和skill_id也,所以用一組計數(a.skill_id)由JOB_ID和的cust_id返回30+

job_id, cust_id, skill_id 
    2,  1,  1 
    2,  1,  2 
    2,  1,  9 
    2,  3,  1 
    2,  3,  2 
    2,  3,  9 
    2,  3,  10 
    2,  4,  1 
    2,  4,  9 
    3,  1,  12 
    3,  3,  10 
    3,  4,  12 

一個skill_id也計數我想讓它返回的是作業ID,客戶ID和不同的Skill_ID的數量。我錯過了什麼以返回以下數據集:?

job_id, cust_id, skill_id 
'2', '1',  '3' 
'2', '3',  '4' 
'2', '4',  '2' 
'3', '1',  '1' 
'3', '3',  '1' 
'3', '4',  '1' 
+0

那不明顯嗎?然後把它從查詢中拿出來? – Hituptony

+0

這個問題不是很好 - 大概你已經誤解了DISTINCT運算符的意思/目的 – Strawberry

+0

@Strawberry對不起,我編輯了這個問題來澄清一點。我想要job_id,cust_id和job ID和cust id不同的行數 – Danejir

回答

2

你想要一個group by

SELECT job_id, cust_id, count(distinct a.skill_id) 
FROM aaa.jp_job_skill_ref a INNER JOIN 
    aaa.jp_cust_skill_ref b 
    ON a.skill_id = b.skill_id 
GROUP BY `job_id`, `cust_id`; 

這是一個非常基本的SQL查詢。 group by是SQL語言的重要組成部分。您應該研究它,以便您可以使用SQL。

+0

這會很好用,但是我所使用的兩個引用表有多個cust_id和skill_id,或者job_id和skill_id。所以它變成了98的計數,而不是像選擇原始不同的查詢 – Danejir

+0

那樣的3計數你想'count(distinct a.skill_id)'? – flaschenpost

+0

@flaschenpost。 。 。當然。仔細閱讀,原來的問題很明顯,這是OP想要的。 –

1
SELECT 2 job_id, 1 cust_id, 3 skill_id 
UNION 
SELECT 2,3,4 
UNION 
SELECT 2,4,2 
UNION 
SELECT 3,1,1 
UNION 
SELECT 3,3,1 
UNION 
SELECT 3,4,1; 
+0

這是OP的問題嗎?我在這裏看不到計數 –

+0

是的。如上所述,這完全滿足OP的要求。如果OP想要更好的答案,他們可能會問一個更好的問題。 – Strawberry

2

您是否正在尋找?

select 
j1.job_id, 
j1.cust_id, 
j2.cnt as skill_id 
from jp_job_skill_ref j1 
inner join (
    select 
    job_id, 
    cust_id, 
    count(skill_id) as `cnt` 
    from jp_job_skill_ref 
    group by job_id,cust_id 

)j2 
on j1.job_id = j2.job_id AND j1.cust_id = j2.cust_id 
group by j1.job_id,j1.cust_id; 

如果您需要skill_id也鮮明的數量,只需更換

count(skill_id) as `cnt` 

count(distinct skill_id) as `cnt` 

DEMO

我已經更換了表名aaa.jp_job_skill_ref只是在示例中爲。

1
SELECT DISTINCT CONCAT(job_id, cust_id), a.skill_id 
FROM aaa.jp_job_skill_ref a 
INNER JOIN aaa.jp_cust_skill_ref b 
ON a.skill_id = b.skill_id 
ORDER BY `job_id`, `cust_id`, `skill_id`;