pensée de cette façon, vous essayez de relier la table elle-même par col2, donc nous allons commencer avec une jointure sur elle-même:
select left.col1, right.col1/*, ...*/ from table left inner join table right on left.col2 = right.col2 where left.col1 = '2001' /* ... */
maintenant pour votre ensemble. Vous voulez regrouper tous right.col1 pour obtenir le nombre pour cette colonne:
select left.col1, right.col1, COUNT(*) from table left inner join table right on left.col2 = right.col2 where left.col1 = '2001' group by right.col2
que je crois sortirais avec les chiffres bruts. Je crois que vous devrez passer sur la requête et obtenir un total pour obtenir la fréquence. En guise de note, cela serait beaucoup plus compliqué si col1 n'était pas constant.
Edité ajouter: Si vous êtes à la recherche d'une requête, au lieu de itérer dans la langue que vous interrogez de, vous devez faire ce groupe deux fois:
SELECT abs_freq.col1, abs_freq.col2, abs_freq.freq/totals.total
FROM (SELECT
left.col1 AS col1,
COUNT(*) AS total
FROM TABLE LEFT
INNER JOIN TABLE RIGHT
ON left.col2 = right.col2
WHERE left.col1 = '2001'
GROUP BY left.col1
) totals
INNER JOIN (SELECT
left.col1 AS col1,
right.col1 AS col2,
COUNT(*) AS freq
FROM TABLE LEFT
INNER JOIN TABLE RIGHT
ON left.col2 = right.col2
WHERE left.col1 = '2001'
GROUP BY right.col2
) abs_freq
ON abs_freq.col1 = totals.col1
Cela n'a aucun sens Pour moi, pouvez-vous reformuler la question? –
Vos données col2 dans le premier bloc sont-elles correctes? – northpole
l'exemple de données et les résultats souhaités n'ont aucun sens - 2001 se produit deux fois dans col1 dans l'exemple, les valeurs col2 correspondantes sont 3001 et 3003, une fois chacune - pas de relation du tout avec la sortie désirée. –