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

MYSQL:一意の値を選択しながらフィールド値の合計を選択しますか?

    私が正しく理解していれば、did_i_buy 列は「トムが購入した」という意味です。あなたはこのようにそれをすることができます:

    SELECT
      Items.item_id,
      item_name,
      COUNT(CASE WHEN purchase_status='bought' THEN 1 END) as number_bought,
      MAX(CASE WHEN purchase_status='bought' AND user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
    FROM Purchases
    JOIN Items ON Purchases.item_id=Items.item_id
    GROUP BY Items.item_id
    

    または(1つのCASE ステートメント、以下のコメントを参照)

    SELECT
      Items.item_id,
      item_name,
      COUNT(purchase_status='bought') as number_bought,
      MAX(CASE WHEN user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
    FROM Purchases
    JOIN Items ON Purchases.item_id=Items.item_id
    WHERE purchase_status='bought'
    GROUP BY Items.item_id
    

    そしてもう1つ微調整: WHEREのため 句、COUNT purchase_status='bought'の行のみが表示されます 、したがって、ステータスをチェックする式を省略できます(上記からの唯一の変更は4行目です):

    SELECT
      Items.item_id,
      item_name,
      COUNT(*) as number_bought,
      MAX(CASE WHEN user_name='Tom' THEN 'yes' ELSE 'no' END) AS did_i_buy
    FROM Purchases
    JOIN Items ON Purchases.item_id=Items.item_id
    WHERE purchase_status='bought'
    GROUP BY Items.item_id
    


    1. JPA Hibernate Persistence例外[PersistenceUnit:デフォルト]HibernateSessionFactoryをビルドできません

    2. テーブル'/tmp/#sql_3c51_0.MYI'のキーファイルが正しくありません。修復しようとしました

    3. OracleのREGEXP_REPLACE()関数

    4. データが存在しない場合でも月ごとのレコードを選択するMysql