PostgreSQL เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ: "เชซเช•เซเชค เชเช• เชœ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช!"

SQL เชฎเชพเช‚, เชคเชฎเซ‡ "เชถเซเช‚" เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เชคเซ‡เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‡ "เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡" เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช เชจเชนเซ€เช‚. เชคเซ‡เชฅเซ€, "เชœเซ‡เชฎ เชคเซ‡ เชธเชพเช‚เชญเชณเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชพเชฏ เช›เซ‡" เชจเซ€ เชถเซˆเชฒเซ€เชฎเชพเช‚ เชเชธเช•เซเชฏเซเชเชฒ เช•เซเชตเซ‡เชฐเซ€ เชตเชฟเช•เชธเชพเชตเชตเชพเชจเซ€ เชธเชฎเชธเซเชฏเชพ เชคเซ‡เชจเชพ เชธเชจเซเชฎเชพเชจเชจเซเช‚ เชธเซเชฅเชพเชจ เชฒเซ‡ เช›เซ‡. SQL เชฎเชพเช‚ เชถเชฐเชคเซ‹เชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“.

เช†เชœเซ‡, เช…เชคเซเชฏเช‚เชค เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช† เช‰เชชเชฏเซ‹เช—เชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เชถเซเช‚ เชชเชฐเชฟเชฃเชฎเซ€ เชถเช•เซ‡ เช›เซ‡ GROUP/DISTINCT ะธ LIMIT เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡.

เชนเชตเซ‡, เชœเซ‹ เชคเชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชฒเช–เซเชฏเซเช‚ เช›เซ‡ "เชชเชนเซ‡เชฒเชพ เช† เชšเชฟเชนเซเชจเซ‹เชจเซ‡ เชœเซ‹เชกเซ‹, เช…เชจเซ‡ เชชเช›เซ€ เชฌเชงเชพ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸเซเชธ เชซเซ‡เช‚เช•เซ€ เชฆเซ‹, เชคเซเชฏเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชฌเชพเช•เซ€ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช เชฆเชฐเซ‡เช• เช•เซ€ เชฎเชพเชŸเซ‡ เชจเช•เชฒ" - เช† เชฌเชฐเชพเชฌเชฐ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡, เชญเชฒเซ‡ เช•เชจเซ‡เช•เซเชถเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชจ เชนเซ‹เชฏ.

เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเชฎเซ‡ เชจเชธเซ€เชฌเชฆเชพเชฐ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡ "เชซเช•เซเชค เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡", เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจ เชชเชฐ เช…เชชเซเชฐเชฟเชฏ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเซ‡ เชเชตเซ€ เช…เชธเชฐเซ‹ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฃเชงเชพเชฐเซ€ เชนเซ‹เชฏ เช›เซ‡.

PostgreSQL เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ: "เชซเช•เซเชค เชเช• เชœ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช!"
เชธเชพเชฐเซเช‚, เช•เชฆเชพเชš เชเชŸเชฒเซเช‚ เช…เชฆเชญเซ‚เชค เชจเชฅเซ€, เชชเชฐเช‚เชคเซ ...

"เชธเซเชตเซ€เชŸ เช•เชชเชฒ": JOIN + DISTINCT

SELECT DISTINCT
  X.*
FROM
  X
JOIN
  Y
    ON Y.fk = X.pk
WHERE
  Y.bool_condition;

เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฅเชถเซ‡ เช•เซ‡ เชคเซ‡เช“ เชถเซเช‚ เช‡เชšเซเช›เซ‡ เช›เซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ X เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ Y เชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เช›เซ‡ เชœเซ‡ เชชเชฐเชฟเชชเซ‚เชฐเซเชฃ เชธเซเชฅเชฟเชคเชฟ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡. เชฆเซเชตเชพเชฐเชพ เชตเชฟเชจเช‚เชคเซ€ เชฒเช–เซ€ เชนเชคเซ€ JOIN โ€” เช˜เชฃเซ€ เชตเช–เชค เช•เซ‡เชŸเชฒเชพเช• pk เชฎเซ‚เชฒเซเชฏเซ‹ เชฎเชณเซเชฏเชพ (เชตเชพเชฏ เชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ€ เชฏเซ‹เช—เซเชฏ เชเชจเซเชŸเซเชฐเซ€เช“ เชฆเซ‡เช–เชพเชˆ). เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเซเช‚? เชšเซ‹เช•เซเช•เชธ DISTINCT!

เชคเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ "เชชเซเชฐเชธเชจเซเชจเชคเชพ" เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฆเชฐเซ‡เช• เชเช•เซเชธ-เชฐเซ‡เช•เซ‹เชฐเซเชก เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชธเซ‹ เชธเช‚เชฌเช‚เชงเชฟเชค Y-เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชนเซ‹เชฏ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸเซเชธ เชตเซ€เชฐเชคเชพเชชเซ‚เชฐเซเชตเช• เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡...

PostgreSQL เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ: "เชซเช•เซเชค เชเช• เชœ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช!"

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช เซ€เช• เช•เชฐเชตเซเช‚? เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชธเชฎเชœเซ‹ เช•เซ‡ เชธเชฎเชธเซเชฏเชพเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ "เชเช•เซเชธ เชฐเซ‡เช•เซ‹เชฐเซเชก เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ Y เชฎเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ€ เชเช• เชชเชฐเชฟเชชเซ‚เชฐเซเชฃ เชถเชฐเชค เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เช›เซ‡" - เช›เซ‡เชตเชŸเซ‡, เช…เชฎเชจเซ‡ Y-เชฐเซ‡เช•เซ‹เชฐเซเชกเชฎเชพเช‚เชฅเซ€ เชœ เช•เช‚เชˆเชชเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชจเซ‡เชธเซเชŸเซ‡เชก เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡

SELECT
  *
FROM
  X
WHERE
  EXISTS(
    SELECT
      NULL
    FROM
      Y
    WHERE
      fk = X.pk AND
      bool_condition
    LIMIT 1
  );

PostgreSQL เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชธเชฎเชœเซ‡ เช›เซ‡ เช•เซ‡ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ เชคเซ‡ เชชเซเชฐเชฅเชฎ เชเชจเซเชŸเซเชฐเซ€ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡ เชœเซ‡ เช†เชตเซ‡ เช›เซ‡, เชœเซ‚เชจเซ€ เชฒเซ‹เช•เซ‹ เชจเชฅเซ€. เชคเซ‡เชฅเซ€ เชนเซเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชธเซ‚เชšเชตเชตเชพเชจเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซเช‚ เช›เซเช‚ LIMIT 1 เช…เช‚เชฆเชฐ EXISTS.

เชฒเซ‡เชŸเชฐเชฒ เชœเซ‹เช‡เชจ

SELECT
  X.*
FROM
  X
, LATERAL (
    SELECT
      Y.*
    FROM
      Y
    WHERE
      fk = X.pk AND
      bool_condition
    LIMIT 1
  ) Y
WHERE
  Y IS DISTINCT FROM NULL;

เช† เชœ เชตเชฟเช•เชฒเซเชช, เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹, เชฎเชณเซ‡เชฒเชพ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ Y-เชฐเซ‡เช•เซ‹เชฐเซเชกเชฎเชพเช‚เชฅเซ€ เชคเชฐเชค เชœ เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพ เชชเชฐเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชฒเซ‡เช–เชฎเชพเช‚ เชธเชฎเชพเชจ เชตเชฟเช•เชฒเซเชชเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ "PostgreSQL เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ: เชเช• เชฆเซเชฐเซเชฒเชญ เชฐเซ‡เช•เซ‹เชฐเซเชก เชœเซ‹เช‡เชจเชจเซ€ เชฎเชงเซเชฏเชฎเชพเช‚ เชชเชนเซ‹เช‚เชšเชถเซ‡".

"เชถเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเซ‹": DISTINCT [เชšเชพเชฒเซ] + เชฎเชฐเซเชฏเชพเชฆเชพ 1

เช†เชตเชพ เช•เซเชตเซ‡เชฐเซ€ เชŸเซเชฐเชพเชจเซเชธเชซเซ‹เชฐเซเชฎเซ‡เชถเชจเชจเซ‹ เชตเชงเชพเชฐเชพเชจเซ‹ เชซเชพเชฏเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชœเซ‹ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฎเชพเชคเซเชฐ เชเช• เช…เชฅเชตเชพ เชฅเซ‹เชกเชพเชจเซ€ เชœ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ€ เชถเซ‹เชงเชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชจเซ€เชšเซ‡เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚:

SELECT DISTINCT ON(X.pk)
  *
FROM
  X
JOIN
  Y
    ON Y.fk = X.pk
LIMIT 1;

เชนเชตเซ‡ เช…เชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชตเชพเช‚เชšเซ€เช เช›เซ€เช เช…เชจเซ‡ เชธเชฎเชœเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ DBMS เชถเซเช‚ เช•เชฐเชตเชพเชจเซ€ เชฆเชฐเช–เชพเชธเซเชค เช•เชฐเซ‡ เช›เซ‡:

  • เชšเชฟเชนเซเชจเซ‹เชจเซ‡ เชœเซ‹เชกเซ‡ เช›เซ‡
  • X.pk เชฆเซเชตเชพเชฐเชพ เช…เชจเชจเซเชฏ
  • เชฌเชพเช•เซ€เชจเซ€ เชเชจเซเชŸเซเชฐเซ€เช“เชฎเชพเช‚เชฅเซ€, เชเช• เชชเชธเช‚เชฆ เช•เชฐเซ‹

เชคเซ‹ เชคเชฎเชจเซ‡ เชถเซเช‚ เชฎเชณเซเชฏเซเช‚? "เชซเช•เซเชค เชเช• เชเชจเซเชŸเซเชฐเซ€" เช…เชจเชจเซเชฏเชฎเชพเช‚เชฅเซ€ - เช…เชจเซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เช†เชจเซ‡ เชฌเชฟเชจ-เช…เชจเซ‹เช–เชพเชฎเชพเช‚เชฅเซ€ เชฒเชˆเชถเซเช‚, เชคเซ‹ เชถเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชฌเชฆเชฒเชพเชถเซ‡?.. "เช…เชจเซ‡ เชœเซ‹ เช•เซ‹เชˆ เชคเชซเชพเชตเชค เชจเชฅเซ€, เชคเซ‹ เชถเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเชตเซ€?"

SELECT
  *
FROM
  (
    SELECT
      *
    FROM
      X
    -- ััŽะดะฐ ะผะพะถะฝะพ ะฟะพะดััƒะฝัƒั‚ัŒ ะฟะพะดั…ะพะดัั‰ะธั… ัƒัะปะพะฒะธะน
    LIMIT 1 -- +1 Limit
  ) X
JOIN
  Y
    ON Y.fk = X.pk
LIMIT 1;

เช…เชจเซ‡ เชธเชพเชฅเซ‡ เชฌเชฐเชพเชฌเชฐ เช เชœ เชตเชฟเชทเชฏ GROUP BY + LIMIT 1.

โ€œเชฎเชพเชฐเซ‡ เชฎเชพเชคเซเชฐ เชชเซ‚เช›เชตเซเช‚ เช›เซ‡โ€: เช—เชฐเซเชญเชฟเชค GROUP + LIMIT

เชธเชฎเชพเชจ เชตเชธเซเชคเซเช“ เชตเชฟเชตเชฟเชง เชธเชฎเชฏเซ‡ เชฅเชพเชฏ เช›เซ‡ เชฌเชฟเชจ-เช–เชพเชฒเซ€เชชเชฃเซเช‚ เชคเชชเชพเชธเซ‹ เชœเซ‡เชฎ เชœเซ‡เชฎ เชตเชฟเชจเช‚เชคเซ€ เช†เช—เชณ เชตเชงเซ‡ เชคเซ‡เชฎ เชšเชฟเชนเซเชจเซ‹ เช…เชฅเชตเชพ CTE:

...
CASE
  WHEN (
    SELECT
      count(*)
    FROM
      X
    LIMIT 1
  ) = 0 THEN ...

เชเช•เช‚เชฆเชฐ เช•เชพเชฐเซเชฏเซ‹ (count/min/max/sum/...) เชธเซเชชเชทเซเชŸ เชธเซ‚เชšเชจเชพเช“ เชตเชฟเชจเชพ เชชเชฃ, เชธเชฎเช—เซเชฐ เชธเซ‡เชŸ เชชเชฐ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ GROUP BY. เชธเชพเชฅเซ‡ เชœ LIMIT เชคเซ‡เช“ เชฌเชนเซ เชฎเซˆเชคเซเชฐเซ€เชชเซ‚เชฐเซเชฃ เชจเชฅเซ€.

เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชตเชฟเชšเชพเชฐเซ€ เชถเช•เซ‡ เช›เซ‡ "เชœเซ‹ เชคเซเชฏเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชก เช›เซ‡, เชคเซ‹ เชฎเชพเชฐเซ‡ LIMIT เช•เชฐเชคเชพเช‚ เชตเชงเซเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€". เชชเชฐเช‚เชคเซ เชคเซ‡ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚! เช•เชพเชฐเชฃ เช•เซ‡ เช†เชงเชพเชฐ เชฎเชพเชŸเซ‡ เชคเซ‡ เช›เซ‡:

  • เชคเซ‡เช“ เชถเซเช‚ เช‡เชšเซเช›เซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ‹ เชคเชฎเชพเชฎ เชฐเซ‡เช•เซ‹เชฐเซเชก เช…เชจเซเชธเชพเชฐ
  • เชคเซ‡เช“ เชชเซ‚เช›เซ‡ เชคเซ‡เชŸเชฒเซ€ เชฒเซ€เชŸเซ€เช“ เช†เชชเซ‹

เชฒเช•เซเชทเซเชฏ เชถเชฐเชคเซ‹ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡, เชจเซ€เชšเซ‡เชจเชพเชฎเชพเช‚เชฅเซ€ เชเช• เช…เชตเซ‡เชœเซ€ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡:

  • (count + LIMIT 1) = 0 เชชเชฐ NOT EXISTS(LIMIT 1)
  • (count + LIMIT 1) > 0 เชชเชฐ EXISTS(LIMIT 1)
  • count >= N เชชเชฐ (SELECT count(*) FROM (... LIMIT N))

"เช—เซเชฐเชพเชฎเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซเช‚ เช…เชŸเช•เชตเซเช‚": DISTINCT + LIMIT

SELECT DISTINCT
  pk
FROM
  X
LIMIT $1

เชจเชฟเชทเซเช•เชชเชŸ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชจเชฟเชทเซเช เชพเชชเซ‚เชฐเซเชตเช• เชฎเชพเชจเซ‡ เช›เซ‡ เช•เซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช…เชฎเชฒ เช•เชฐเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเชถเซ‡. เชœเชฒเชฆเซ€ เช†เชชเชฃเชจเซ‡ เชชเซเชฐเชฅเชฎ เชตเชฟเชตเชฟเชง เชฎเซ‚เชฒเซเชฏเซ‹เชฎเชพเช‚เชฅเซ€ $1 เชฎเชณเซ‡ เช›เซ‡ เชœเซ‡ เช†เชตเซ‡ เช›เซ‡.

เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช•เซเชฏเชพเชฐเซ‡เช• เช† เชจเชตเชพ เชจเซ‹เชกเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เชฐเชถเซ‡ เช‡เชจเซเชกเซ‡เช•เซเชธ เชธเซเช•เซ€เชช เชธเซเช•เซ‡เชจ, เชœเซ‡เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชชเชฐ เชนเชพเชฒเชฎเชพเช‚ เช•เชพเชฎ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชœเซ เชธเซเชงเซ€ เชจเชฅเซ€.

เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฎ เชฐเซ‡เช•เซ‹เชฐเซเชก เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเชจเซเชฏ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡เชฅเซ€ เชœ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒ เชฐเช•เชฎ เชชเชฐเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชœเซ‹ เช†เชชเชฃเซ‡ เช•เช‚เชˆเช• เชเชตเซเช‚ เช‡เชšเซเช›เชคเชพ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เช‰เชฆเชพเชธเซ€ เช›เซ‡ $ 1 = 4, เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชธเซ‡เช‚เช•เชกเซ‹ เชนเชœเชพเชฐเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เช›เซ‡...

เชจเชฟเชฐเชฐเซเชฅเช• เช‰เชฆเชพเชธเซ€ เชจ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช PostgreSQL Wiki เชชเชฐเชฅเซ€ "DISTINCT เช—เชฐเซ€เชฌเซ‹ เชฎเชพเชŸเซ‡ เช›เซ‡".:

PostgreSQL เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ: "เชซเช•เซเชค เชเช• เชœ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช!"

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹