Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jedna tabela, jedna komórka i dwie wartości
Forum PHP.pl > Forum > Bazy danych
krysk
Tabela:

+---+------+-----+
|id | id_a | ret |
+---+------+-----+
| 1 | 1 | y |
+---+------+-----+
| 2 | 1 | y |
+---+------+-----+
| 3 | 1 | n |
+---+------+-----+


Czy istnieje możliwość pobrania poprzez jedno zapytanie ile razy dla każdego id_a pole ret ma wartość 'y' a ile razy 'n'? Jeśli tak, to w jaki sposób? Czym powinienem się bliżej zainteresować?
Cezar708
da radę
  1. SELECT id_a, count(ret) AS liczba, 'y' AS ret_val
  2. FROM tabela WHERE ret='y'
  3. GROUP BY id_a
  4. UNION
  5. SELECT id_a, count(ret) AS liczba, 'n' AS ret_val
  6. FROM tabela WHERE ret='n'
  7. GROUP BY id_a


dla Twojego przykładu w wyniku otrzymasz:
Kod
+------+--------+--------
| id_a | liczba | ret_val
+------+--------+--------
| 1 |   2    |  y
+---+--------+--------
| 1 |   1    |  n
+------+--------+--------
krysk
To już duży postęp dla mnie, jednakże miałem na myśli stworzenie dwóch dodatkowych "kolumn" - ret_y i ret_n gdzie to byłyby liczby z ilością tychże wartości.
Cezar708
zbudowałem takie zapytanie i wyobraź sobie zadziałało:
  1. SELECT
  2. id_a AS tst,
  3. (SELECT count(*) FROM tabela WHERE ret='y' AND id_a=tst) AS liczba_y,
  4. (SELECT count(*) FROM tabela WHERE ret='n' AND id_a=tst) AS liczba_n
  5. FROM tabela GROUP BY id_a;


dane w tabeli:
Kod
+----+------+------+
| id | id_a | ret  |
+----+------+------+
|  1 |    1 | y    |
|  2 |    1 | y    |
|  3 |    1 | n    |
|  4 |    2 | n    |
+----+------+------+


po wykonaniu zapytania wynik:
Kod
+------+----------+----------+
| tst  | liczba_y | liczba_n |
+------+----------+----------+
|    1 |        2 |        1 |
|    2 |        0 |        1 |
+------+----------+----------+


myślę, że to spełni oczekiwania, aczkolwiek nie jest to najszybszy sposób i wymagane są podzapytania
kitol
Myślę, że to będzie najbardziej optymalne:
  1. SELECT id_a, SUM(yes) AS ile_y, COUNT(*)-SUM(yes) AS ile_n
  2. FROM (SELECT id_a,IF(ret='y',1,0) AS yes FROM tabela) a GROUP BY id_a
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.