[proofplan]
The strategy is to repackage the [Row Orthogonality Relations](/theorems/2430) as a matrix identity for the character table $X = (\chi_i(g_j))$. Row orthogonality says that the rows of $X$ are orthonormal in a weighted Hermitian pairing, which translates to $\bar{X} D^{-1} X^\top = I$ where $D$ is the diagonal matrix of centraliser sizes. Because the table is square — there are $k$ irreducible characters and $k$ conjugacy classes by [Number of Irreducible Characters](/theorems/2428) — this single identity forces $D^{-1} \bar{X}^\top$ to be the inverse of $X$, so multiplication on the other side gives $\bar{X}^\top X = D$. Reading off the $(j, \ell)$-entry yields the column orthogonality relation.
[/proofplan]
[step:Set up the character table as a square matrix and identify the weight diagonal]
Let $g_1, \ldots, g_k$ be representatives of the $k$ conjugacy classes of $G$, and let $\chi_1, \ldots, \chi_k$ be the irreducible complex characters. Define the **character table**
\begin{align*}
X: \{1, \ldots, k\}^2 &\to \mathbb{C}, \\
(i, j) &\mapsto \chi_i(g_j),
\end{align*}
viewed as a matrix $X \in \mathbb{C}^{k \times k}$. The matrix is square because, by [Number of Irreducible Characters](/theorems/2428), the number of irreducible complex characters of a finite group equals the number of its conjugacy classes; both are $k$.
Let $D \in \mathbb{C}^{k \times k}$ be the diagonal matrix with $D_{jj} = |C_G(g_j)|$, the size of the centraliser of $g_j$. Each $|C_G(g_j)| \geq 1$ (the centraliser always contains the identity), so $D$ is invertible with $D^{-1}$ diagonal and $(D^{-1})_{jj} = 1/|C_G(g_j)|$.
[guided]
The proof is essentially a piece of linear algebra: we have an inner-product identity on the rows of the character table (row orthogonality), and we want the analogous identity on the columns (column orthogonality). For a square matrix, "rows are an orthonormal basis" and "columns are an orthonormal basis" are equivalent statements — both say the matrix is unitary up to a weight. The squareness is essential, and it is supplied by [Number of Irreducible Characters](/theorems/2428): there are exactly $k$ irreducible characters and $k$ conjugacy classes, so $X$ is $k \times k$.
The weight in our pairing is $1/|C_G(g_j)|$, which is exactly the size of the conjugacy class of $g_j$ divided by $|G|$ (orbit-stabiliser: $|G|/|C_G(g_j)| = |\mathrm{cl}(g_j)|$). This factor encodes the fact that the inner product $\langle \chi, \chi' \rangle = \frac{1}{|G|} \sum_{g \in G} \overline{\chi(g)} \chi'(g)$, when grouped by conjugacy class, weights each class representative by the class size, equivalently by $|G|/|C_G(g_j)|$.
[/guided]
[/step]
[step:Translate row orthogonality into the matrix identity $\bar{X} D^{-1} X^\top = I$]
The [Row Orthogonality Relations](/theorems/2430) state that for any pair $(i, i')$ of indices,
\begin{align*}
\langle \chi_i, \chi_{i'} \rangle = \delta_{i i'}.
\end{align*}
Group the defining sum $\langle \chi_i, \chi_{i'} \rangle = \frac{1}{|G|} \sum_{g \in G} \overline{\chi_i(g)} \chi_{i'}(g)$ by conjugacy classes. Since characters are class functions, $\chi_i$ and $\chi_{i'}$ are constant on each class. The class of $g_\ell$ has size $|G|/|C_G(g_\ell)|$ by orbit-stabiliser. Hence
\begin{align*}
\langle \chi_i, \chi_{i'} \rangle = \frac{1}{|G|} \sum_{\ell=1}^k \frac{|G|}{|C_G(g_\ell)|}\, \overline{\chi_i(g_\ell)}\, \chi_{i'}(g_\ell) = \sum_{\ell=1}^k \frac{1}{|C_G(g_\ell)|}\, \overline{\chi_i(g_\ell)}\, \chi_{i'}(g_\ell).
\end{align*}
Recognising $\overline{\chi_i(g_\ell)} = \bar{X}_{i\ell}$, $\chi_{i'}(g_\ell) = X_{i'\ell}$, and $1/|C_G(g_\ell)| = (D^{-1})_{\ell\ell}$, this reads
\begin{align*}
\delta_{ii'} = \sum_{\ell=1}^k \bar{X}_{i\ell}\, (D^{-1})_{\ell\ell}\, X_{i'\ell} = \sum_{\ell, m=1}^k \bar{X}_{i\ell}\, (D^{-1})_{\ell m}\, (X^\top)_{m i'} = (\bar{X} D^{-1} X^\top)_{i i'},
\end{align*}
where the second equality inserts $(D^{-1})_{\ell m} = (D^{-1})_{\ell\ell} \delta_{\ell m}$ for the diagonal matrix $D^{-1}$. Hence
\begin{align*}
\bar{X} D^{-1} X^\top = I_{k \times k}.
\end{align*}
[guided]
We start from row orthogonality, which says rows $i$ and $i'$ of the character table are orthonormal in a particular Hermitian inner product:
\begin{align*}
\langle \chi_i, \chi_{i'} \rangle = \frac{1}{|G|} \sum_{g \in G} \overline{\chi_i(g)} \chi_{i'}(g) = \delta_{ii'}.
\end{align*}
The sum runs over all $g \in G$, but the integrand depends only on the conjugacy class of $g$ (characters are class functions). So we group $g$ by conjugacy class, replacing the sum by a sum over class representatives weighted by class size. The class of $g_\ell$ has size equal to the orbit of $g_\ell$ under conjugation, which is $|G|/|C_G(g_\ell)|$ by orbit-stabiliser. After this grouping:
\begin{align*}
\langle \chi_i, \chi_{i'} \rangle = \sum_{\ell=1}^k \frac{1}{|C_G(g_\ell)|}\, \overline{\chi_i(g_\ell)}\, \chi_{i'}(g_\ell).
\end{align*}
We now interpret each piece as a matrix entry. The complex conjugate of an entry of $X$ is an entry of $\bar{X}$. The factor $1/|C_G(g_\ell)|$ is $(D^{-1})_{\ell\ell}$. The factor $\chi_{i'}(g_\ell) = X_{i'\ell}$ is the $(\ell, i')$-entry of $X^\top$. Recognising the resulting expression as a matrix product, we obtain $\bar{X} D^{-1} X^\top = I$ — a single matrix equation that encodes all of row orthogonality.
[/guided]
[/step]
[step:Multiply by $X$ on the left to deduce $\bar{X}^\top X = D$]
The identity $\bar{X} D^{-1} X^\top = I$ shows that the $k \times k$ matrix $D^{-1} X^\top$ is a right inverse of $\bar{X}$. For square matrices over $\mathbb{C}$, a right inverse is also a left inverse and is unique. Hence $D^{-1} X^\top$ is the (two-sided) inverse of $\bar{X}$, so
\begin{align*}
D^{-1} X^\top \bar{X} = I.
\end{align*}
Multiplying both sides on the left by $D$:
\begin{align*}
X^\top \bar{X} = D.
\end{align*}
Taking the entry-by-entry complex conjugate of this matrix identity (which leaves $D$ unchanged because $D$ is real, and swaps $X$ with $\bar{X}$):
\begin{align*}
\bar{X}^\top X = D.
\end{align*}
[guided]
The squareness of $X$ is essential here. From $\bar{X} D^{-1} X^\top = I$ alone, one cannot conclude any identity involving $X$ multiplied on the **other** side — that step requires a finite-dimensional fact: a square matrix with a right inverse has the same matrix as a two-sided inverse. This is where the equality of the number of irreducibles and the number of conjugacy classes (i.e. [Number of Irreducible Characters](/theorems/2428)) is consumed: it makes $X$ square so that the "right inverse equals left inverse" argument applies.
Once we have $X^\top \bar{X} = D$, conjugating both sides converts $X^\top \bar{X}$ into $\bar{X}^\top X$ (entry-wise conjugation distributes over matrix multiplication and turns $X$ into $\bar{X}$ and conversely), while leaving $D$ fixed because $|C_G(g_j)|$ is a positive integer. The conjugated identity $\bar{X}^\top X = D$ is the column orthogonality statement in matrix form.
[/guided]
[/step]
[step:Read off the $(j, \ell)$-entry to obtain the column orthogonality relation]
Compute the $(j, \ell)$-entry of $\bar{X}^\top X$:
\begin{align*}
(\bar{X}^\top X)_{j\ell} = \sum_{i=1}^k (\bar{X}^\top)_{ji}\, X_{i\ell} = \sum_{i=1}^k \bar{X}_{ij}\, X_{i\ell} = \sum_{i=1}^k \overline{\chi_i(g_j)}\, \chi_i(g_\ell).
\end{align*}
The $(j, \ell)$-entry of $D$ is $\delta_{j\ell} D_{\ell\ell} = \delta_{j\ell} |C_G(g_\ell)|$. Equating gives
\begin{align*}
\sum_{i=1}^k \overline{\chi_i(g_j)}\, \chi_i(g_\ell) = \delta_{j\ell}\, |C_G(g_\ell)|,
\end{align*}
which is the column orthogonality relation.
[/step]