sql >> データベース >  >> RDS >> PostgreSQL

SQLですべての結合されたオカレンスをカウントするにはどうすればよいですか?

    最後の行の一致する商品の数が他の行と異なるため、簡単ではありません。ある種のGROUP_CONCAT()演算子(MySQLで利用可能、InformixやおそらくPostgreSQLなどの他のDBMSで実装可能)でそれを実行できるかもしれませんが、私はそれを確信していません。

    ペアワイズマッチング

    SELECT p1.product_name AS name1, p2.product_name AS name2, COUNT(*)
      FROM (SELECT p.product_name, h.transaction_id
              FROM products AS p
              JOIN transactions_has_products AS h ON h.product_id = p.product_id
           ) AS p1
      JOIN (SELECT p.product_name, h.transaction_id
              FROM products AS p
              JOIN transactions_has_products AS h ON h.product_id = p.product_id
           ) AS p2
        ON p1.transaction_id = p2.transaction_id
       AND p1.product_name   < p2.product_name
     GROUP BY p1.name, p2.name;
    

    トリプルマッチの処理は簡単ではありません。それ以上に拡張するのは確かにかなり難しいです。



    1. 外部からDockerコンテナでPostgresqlに接続する

    2. MariaDBでのCHARSET()のしくみ

    3. PostgreSQLでの複数の配列の交差

    4. Npgsql4.0のパラメーターとヌル値