Как я могу сделать этот запрос MySQL? Если вообще возможно - PullRequest
0 голосов
/ 03 января 2019

У меня есть эта таблица

itemname  property    value
------------------------------------------
A         size        big
A         color       red

B         size        big
B         color       blue

C         size        small
C         color       blue

D         size        small
D         color       blue

E         size        small
E         color       blue

Я создаю список примерно так: SELECT property,value,COUNT(itemname),GROUP_CONCAT(itemname) FROM table GROUP BY property,value

property     value     count
---------------------------------
size         big         2             (A,B)
size         small       3             (C,D,E)
color        red         1             (A)
color        blue        4             (B,C,D,E)

Я хочу отфильтровать элементы, которые БОЛЬШИЕ && МАЛЕНЬКИЕ && СИНИЕ, какМогу ли я достичь этого результата?(Я ДОЛЖЕН быть конкретным в отношении свойства при обращении к значению для фильтрации)

`SELECT 
  property,value,COUNT(itemname),GROUP_CONCAT(itemname)
 FROM 
  table 
 GROUP BY 
  property,value
 HAVING 
  ( property IN ('size') && value IN ('big','small') )
  && 
  ( property IN ('color') && value IN ('blue') )`

Но это не имеет никакого результата, потому что оно пытается сопоставить строку с размером и цветом одновременно?Мой желаемый вывод в этом случае - избегать элемента A, потому что он красный, как этот:

property     value     count
---------------------------------
size         big         1             (B) A not here, because it is red
size         small       3             (C,D,E) no change because all are blue
color        red         0             (A) no red is selected, so this row should be 0 or not listed at all
color        blue        4             (B,C,D,E) all the 4 are big or small and blue

Пожалуйста, кто-нибудь поможет мне в этом, я потерял 2 дня, задаваясь вопросом о решении.Я мог бы использовать CASE в сочетании с HAVING?Или я должен как-то обратиться к ГДЕ?
Примечание: Эта таблица на самом деле не настоящая, но если этот вопрос можно решить, я могу использовать ее в своих реальных таблицах, которые намного сложнее.

1 Ответ

0 голосов
/ 04 января 2019

Я придумал решение самостоятельно, конечно, этот пример таблицы - чепуха, смысл в том, как она была решена.

`
SELECT  
  property,  
  value,  
  COUNT(t.itemname) AS count  
FROM ( 
  SELECT 
    itemname 
  FROM 
    table 
  GROUP BY 
    itemname 
  HAVING 
    COUNT (CASE WHEN property='size' AND value IN ('big','small') THEN 1 END) >=1  
    && 
    COUNT (CASE WHEN property='color' AND value IN ('blue') THEN 1 END) >=1
   ) t
INNER JOIN 
  table ON table.itemname=t.itemname 
GROUP BY 
  property,value
`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...