sql >> Base de Datos >  >> RDS >> Mysql

MYSQL:¿SELECCIONA la suma de los valores de campo al mismo tiempo que SELECCIONA valores únicos?

Si entiendo correctamente, el did_i_buy columna significa "compró Tom". Puedes hacerlo así:

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

Alternativamente (un CASE declaración, vea los comentarios a continuación)

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

Y un ajuste más: Por el WHERE cláusula, el COUNT solo verá filas donde purchase_status='bought' , por lo que la expresión que verifica el estado se puede omitir (el único cambio desde arriba está en la línea 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